看单例模式的例子:
运行结果:
可见调用两次instance()只调用了一次构造函数,只产生了一个对象,指针clienta和clientb存储的是同一个对象的地址。这就是单例模式,通过将类的构造函数设为private,保证只能有一个对象存在。
- C/C++ code
-
#include < iostream > class Singleton{ private : Singleton( int i = 0 ):val(i){ // 构造函数私有 std::cout << " constructor,member val = " << val << std::endl; } int val; static Singleton * ins; public : static Singleton * instance(){ 工厂方法 return ins; } int getVal(){ return val; } void setVal( int i){ val = i; } virtual ~ Singleton(){ if (ins){ delete ins; std::cout << destructor " << std::endl; } } }; Singleton * Singleton::ins = new Singleton( 10 ); int main(){ Singleton * clienta = Singleton::instance(); Singleton * clientb = Singleton::instance(); std::cout << adress clienta: " << clienta << std::endl; std::cout << adress clientb: " << clientb << std::endl; return 0 ; }
运行结果:
- Perl code
-
$ g++ -Wall singleton.cpp -o singleton $ ./singleton constructor,member val = 10 adress clienta: 0x804a008 adress clientb: 0x804a008
可见调用两次instance()只调用了一次构造函数,只产生了一个对象,指针clienta和clientb存储的是同一个对象的地址。这就是单例模式,通过将类的构造函数设为private,保证只能有一个对象存在。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。