單例模式 C++實現

#include<iostream>
#include<string>
#include<cstdlib>
using namespace std;
/*
  單例模式 
  存在的問題是: 如何銷燬這個類?詳情見下文參考。 
*/
class singleton
{
   private:
        singleton(){}  
       // singleton *instance = new singleton();  //這種用法不對,但下一個用法則對,why? 
          static singleton *instance ;     //類中聲明的靜態變量需要在類外在聲明一次,見2處 
     
   public:
             
        static singleton * getinstance()  //而且static 成員函數只能訪問static 變量,詳情見下文參考。 
        {
           
          if(instance == NULL)
          {
              instance = new singleton();  
          }    
           return instance;    
        }
    
};

 singleton* singleton::instance ;    // 2 類中靜態變量在外聲明時不用再加 static, 詳情參考下文。 

int main()
{
  singleton *s1 = singleton::getinstance();   //只有聲明爲static的成員函數纔可以這樣單獨訪問,無需創建任何實例就能訪問,見參考。 
  singleton *s2 = singleton::getinstance(); 
  
  if(s1 == s2)
    cout <<"is the same object!"<< endl;
  system("pause");  
  return 0;    
}


 

 

單例模式的另一種版本 參考:點擊打開鏈接

static 變量 詳細參考: 點擊打開鏈接

特殊變量(static)初始化參考:點擊打開鏈接

論壇參考:點擊打開鏈接

 

總結:瞭解了static 聲明變量時需要注意的細節問題。

發佈了53 篇原創文章 · 獲贊 5 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章