Boost中的單利模式

CalmReason發表於2016-03-31

boost庫實現了一個單利模式,並區分返回的是const & 還是非const &。

如果返回的是const & ,則必然已經是執行緒安全的。

如果返回的是非 const &,則不是執行緒安全的,需要自己注意加鎖哦。

程式碼:

#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()
請按任意鍵繼續. . .



相關文章