2013-02-21 77 views
0

考慮下面的代碼:參考變調用析構

#include <iostream> 

class Singleton 
{ 
public: 
    // GetInstance returns an instance to an existing Singleton object 
    static Singleton& GetInstance() 
    { 
     static Singleton instance; 
     return instance; 
    } 

    // Destructor 
    ~Singleton() 
    { 
     std::cout << "Singleton destructor" << std::endl; 
    } 
private: 
    // Private constructor 
    Singleton() 
    { 
     std::cout << "Singleton constructor" << std::endl; 
    } 
}; 

int main() 
{ 
    Singleton mySingleton = Singleton::GetInstance(); 

    return 0; 
} 

的這個輸出是:

Singleton constructor 
Singleton destructor 
Singleton destructor 

看來,參考變量mySingleton被清理,從而調用析構函數的兩倍。 有什麼辦法可以避免這種行爲?

回答

3

您在這裏製作實例的副本:

Singleton mySingleton = Singleton::GetInstance(); 

你想使拷貝構造函數和賦值運算符私人太大,這將迫使你採取一個參考:

Singleton& mySingleton = Singleton::GetInstance(); 
+0

好抓住!我的錯誤,忘了宣佈(而不是定義)複製構造函數,否則這將被直接指出。乾杯:) – reaper4334 2013-02-21 21:47:28