簡體   English   中英

將靜態變量初始化為類成員或局部函數變量(Singleton示例)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM