單例模式(餓漢式 執行緒安全 無記憶體洩露)
// Singleton.cpp : 定義控制檯應用程式的入口點。
//通過巢狀類實現析構
#include "stdafx.h"
#include <iostream>
using namespace std;
class Singleton{
private:
Singleton(){} //將建構函式定義為私有的,避免直接建立外部物件。
~Singleton()
{
cout<<"delete success!";
system("Pause");
//delete sig;
}
static Singleton *sig; //宣告一個私有的靜態資料成員來作為為一個例項。
public:
static Singleton *getInstance() //宣告一個static型別的介面獲得例項
{
return sig;
}
class GGarbo
{
public:
~GGarbo()
{
if(Singleton::sig!=NULL)
{
cout<<"delete sig success!";
system("Pause");
delete Singleton::sig;
Singleton::sig = NULL;
}
}
};
};
Singleton* Singleton::sig = new Singleton; //在類外進行例項的定義和初始化
int _tmain(int argc, _TCHAR* argv[])
{
Singleton *mig1 = Singleton::getInstance(); //建立兩個例項
Singleton *mig2 = Singleton::getInstance(); //判斷例項是否相等
if (mig1 == mig2)
cout << "Same Instance!\n";
else
cout << "Error in Creating Single Instance!\n";
Singleton::GGarbo garbo;
system("Pause");
return 0;
}