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