1. 程式人生 > >單例模式(餓漢式 執行緒安全 無記憶體洩露)

單例模式(餓漢式 執行緒安全 無記憶體洩露)

// 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;
}