簡體   English   中英

請解釋一個功能單例(C ++)

[英]Please, Explain a one of feature singleton(C++)

例如,我有一個以下課程:

class singelton
{
public:
    static singelton* Instance()
    {
        if (m_pInstance == 0)
        {
            m_pInstance = new singelton();
        }
        return m_pInstance;
    }

    void setData(std::string input) { data = input; }
    void getData() const { std::cout << data << std::endl; }
private:
    singelton() {}
    ~singelton() {}

    static singelton* m_pInstance;

    std::string data;
};

typedef singelton s;

//what is this? Why need a singleton name? I mean "singelton*".
singelton* singelton::m_pInstance = 0;

int main(int argc, char** argv)
{
    s.Instance()->setData("Something...");
    s.Instance()->getData();
    return 0;
}

什么是singelton* singelton::m_pInstance = 0; 該函數為單例實例分配零/空值,但是為什么需要使用singleton* 該分配就像一個函數,但用作分配。

靜態數據成員不是給定類類型的對象的一部分; 它們是獨立的對象。 結果,靜態數據成員的聲明不被視為定義。 因此,必須在類聲明之外定義靜態成員。

在您的示例中:

  • singelton *是一種成員。
  • singleton::是類名(如名稱空間)
  • 並且m_pInstance是成員名稱

PS:由於靜態變量在C ++中默認情況下初始化為0,因此無需將m_pInstance顯式設置為0 (或NULL )。 僅定義就足夠了:

singelton * singelton::m_pInstance;

什么是singelton* singelton::m_pInstance = 0;

它是靜態成員變量m_pInstance初始化程序,將指針靜態初始化為null。 singelton* (指向singelton的指針)是變量的類型; singlelton::m_pInstance是變量的(限定)名稱; = 0是初始化程序。

該函數為單例實例分配零/空值,但是為什么需要使用singleton*

不,它將指針初始化為null; 它還沒有指向任何東西。 第一次有人調用Instance()時,將創建對象本身,並更新指針以指向該對象。 它是一個指針,使對象本身可以在首次需要時創建,而不是在程序啟動期間的任意點創建-這稱為“惰性初始化”。

請注意,在C ++中,無法正確實現Singleton反模式。 該特定實現具有泄漏對象並且不是線程安全的問題。 我強烈建議您擺脫它:只需在適當的位置實例化該對象,並使其壽命比使用該對象的對象更長,然后將其傳遞給需要它的對象。

采用

Singleton::Instance()->setData("Hello");

Singleton::Instance()->getData();

該類只能有一個實例-因此稱為單例

Singleton::Instance可讓您訪問

singelton* singelton::m_pInstance = 0;

對其進行初始化,並在首次使用時創建單例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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