亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区
Chinaunix
標(biāo)題:
貼一個Singleton類
[打印本頁]
作者:
xishuaiya
時間:
2010-10-28 19:56
標(biāo)題:
貼一個Singleton類
本帖最后由 xishuaiya 于 2010-10-28 20:28 編輯
/****************************************************************
說明:本程序?qū)崿F(xiàn)了Singleton類
思路:吧你需要實現(xiàn)單例的類的構(gòu)造函數(shù)、=操作符、拷貝構(gòu)造函數(shù)都聲明為私有的。
這就實現(xiàn)了禁止構(gòu)造,禁止拷貝。然后把Singleton類聲明為該類的友元函數(shù),
把單例類的實例化交給Singleton來完成。
********************************************************************************/
#include <iostream>
#include <memory>
using namespace std;
//Singleton<T>類負責(zé)T類的實例化,并且只實例化一個對象
template<typename T>
class Singleton
{
public:
static T* GetInstance()
{
if(0 == m_inst.get())
m_inst.reset(new T);
return m_inst.get();
}
protected:
Singleton(){}
private:
static auto_ptr<T> m_inst;
};
template<typename T>
auto_ptr<T> Singleton<T>::m_inst;
//my類是單例類,它的它的所有構(gòu)造函數(shù)、賦值操作符都被設(shè)置為私有
//并把Singleton<T>作為友元類;
class my
{
public:
void print()
{
cout << "data = " << data << endl;
}
void Set(int d) {
data = d;
}
~my(){}
private:
my(){data = 1;}
my(my& );
my operator=(my& );
private:
int data;
friend class Singleton<my>;
};
void main()
{
my* inst = Singleton<my>::GetInstance();
inst->Set(5);
inst->print();
my* inst2 = Singleton<my>::GetInstance();
inst2->print();
inst2->Set(3);
inst->print();
}
復(fù)制代碼
作者:
雨過白鷺洲
時間:
2010-10-28 21:08
1. Singleton模式是否還有存在的必要?
2. 并發(fā)問題解決了嗎?
3. 對象生命周期如何管理?
歡迎光臨 Chinaunix (http://www.72891.cn/)
Powered by Discuz! X3.2