设计模式(一)单例模式Singleton

来源:互联网 发布:c 利用java公钥加密 编辑:程序博客网 时间:2024/04/30 17:16

单例介绍

  1. 单例模式不能用静态成员对象来实现,而只能用静态成员的指针来实现,因为项目大的时候会有很多单例,静态对象无法保证初始化次序,有可能会导致运行时错误(用的时候还没实例化)。
  2. 为了防止用户有其他途径意外创建对象,默认构造函数、复制构造函数应该声明为私有。noncopyable
  3. boost提供了非线程安全的实现,可以直接使用
  4. 线程安全的目前还没有

非线程安全的Boost单例实现:

#include<iostream>using namespace std;#include "boost/serialization/singleton.hpp"using namespace boost::serialization;class A {public:A(void){cout<<"A()"<<endl;}~A(void){cout<<"~A()"<<endl;}void print(void)const {cout<<"A::print()"<<endl;}};class B {public:B(void){cout<<"B()"<<endl;}~B(void){cout<<"~B()"<<endl;}void print(void)const {singleton<A>::get_mutable_instance().print();//获取非const实例,非线程安全的}};void global_print(void){singleton<A>::get_const_instance().print();//获取const实例,线程安全的}int main(int,char**){singleton<A>::get_const_instance().print();//获取const实例,线程安全的global_print();B b;b.print();return 0;};
运行结果:
A()
A::print()
A::print()
B()
A::print()
~B()
~A()
请按任意键继续. . .


线程安全的单利:

ACE库实现了线程安全的单利


原创粉丝点击