簡體   English   中英

調用已刪除的的構造函數

[英]Call to deleted constructor of

我有一個C ++項目,並且一直學習設計模式(我對C ++很陌生)。 我有一種情況,我認為單身人士是一個解決方案。 (現在等一下,等一下,等一下,一切就緒:單例已經成為壞蛋。讓我們全力以赴,燒掉那個異端用戶!!!)

我運行了以下示例: https : //stackoverflow.com/a/1008289/2336887

...但是在使用C ++ 11版本時出現錯誤。

我的問題不是是否應該使用Singleton。 它已被覆蓋得足夠多。

我的問題是:為什么要刪除公共構造函數,而不僅僅是保留私有構造函數? 如果停留在該位置,則會發生對已刪除構造函數的錯誤調用。 我不明白,這讓我很沮喪。 有人可以對C ++新手有所啟發嗎?

這是避免轉到另一篇文章的代碼:

 class S {
 public:
     static S& getInstance(){
         static S    instance; 
         return instance;
     }
 private:
     S() {}

 public:
     S(S const&)               = delete;
     void operator=(S const&)  = delete;
 };



 int main() {
     S bus =  S::getInstance();
     return 0;
 }

感謝您的幫助...和耐心等待。

ps:我可以將問題添加到原始帖子中,但是在這一點上,我認為這會帶來更多的噪音。

為什么要刪除公共構造函數,而不僅僅是保留私有構造函數?

因為public構造函數是復制構造函數。 由於不需要並且不應使用該內容,因此將其刪除。 私有構造函數是默認的構造函數,供內部使用(在某個時候,必須構造一個單例!)。

為什么要刪除公共構造函數,而不僅僅是保留私有構造函數?

單例的核心思想是只有一個實例。 如果允許復制對象,則可能有多個實例。 這就是刪除單例的復制構造函數的原因:使單例不可復制。

如果停留在該位置,則會發生對已刪除構造函數的錯誤調用。 我不明白,這讓我很沮喪。

因為您嘗試復制不可復制的對象,所以出現錯誤。 不要嘗試復制單例。 我懷疑您應該改為引用單身人士:

S& bus = S::getInstance();

暫無
暫無

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

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