[英]Static variable initialization as a class member or local function variable (Singleton example)
我將使用Singleton模式演示我的問題,但這是一個更廣泛的問題。 請饒恕我說“ Singletons是邪惡的”演講。
Singleton
版本1
class Singleton
{
public:
static Singleton& getInstance()
{
static Singleton instance; // This becomes a class member in Ver.2
return instance;
}
private:
// Constructor, forbid copy and assign operations etc...
}
Singleton
版本2
class Singleton
{
public:
static Singleton& getInstance()
{
return instance;
}
private:
static Singleton instance; // I'm here now!
// Constructor, forbid copy and assign operations etc...
}
現在,我將解釋兩者之間的區別:
僅當程序流達到instance
的實際定義時(即,程序的某些部分使用Singleton::getInstace()
請求instance
才會初始化版本1 instance
。 換句話說,懶惰實例化。 僅在程序終止時銷毀它。
在調用main()
之前,版本2 instance
將在程序開始時進行初始化。 僅在程序終止時也將被銷毀。
首先,我對上述假設是否正確?
其次,這種初始化行為是否通用(例如針對全局變量和函數)?
最后,關於此事,是否應該提醒我其他細微之處?
謝謝!
你是對的。
您還應該注意,第二版本不保證將在何時創建對象,僅保證在主函數被調用之前。
如果該單例依賴於其他單例,則將導致問題。
也就是說,第一個版本將使您可以更好地控制代碼,初始化順序,當然也可以減少錯誤:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.