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