簡體   English   中英

為什么在單例模式中,我們將復制構造函數和賦值運算符設為私有?

[英]why in singleton pattern , we do make copy constructor and assignment operator as private?

在單例模式中,通常我們將構造函數/析構函數設為私有。 據我了解,因為我們不希望用戶創建/刪除單例對象。 應該只有獲取或創建實例的方法。 但是,我不明白為什么我們需要將復制構造函數和賦值運算符設置為私有。 將復制構造函數和賦值運算符設置為單例私有的優點是什么。

Singleton obj1 = Singleton::CreateInstacnce();
    Singleton obj2 = obj1; // copy ctr gets called
    Singleton obj3;
    obj3 = obj1;  // assignment operator gets called

因此,如果您不將其設為私有,則將創建Singleton類的多個實例。

如果復制單例,則將有兩個相同類型的對象。 單例的目的是僅強制執行一個實例。 復制將打破該假設。

在單例模式中,我們只想實例化一個對象。 如您所說,我們不希望用戶創建/刪除單例對象,也不希望用戶復制第二個對象。

Singleton obj1 = Singleton::CreateInstacnce();
    Singleton obj2 = obj1; // copy ctr gets called
    Singleton obj3;
    obj3 = obj1;  // assignment operator gets called

根據我的觀點,我覺得只有復制ctr應該與構造函數一起是私有的。

自Singleton obj3起,無需將Assignment運算符設置為私有; 無論如何都會給出錯誤,指出Singleton()是私有的。

暫無
暫無

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

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