簡體   English   中英

將禁用的副本構造函數置於私有狀態

[英]put disabled copy constructor in private

要禁用復制構造函數和賦值運算符,很明顯,由於c ++ 11,我們可以執行任何一種操作:

class A {
 public:
  A(const A&) = delete;
  A& operator=(const A&) = delete;
} 

或對於c ++ 03:

class A {
 private:
  A(const A&);
  A& operator=(const A&);
}

但是,這會發生什么:

class A {
 private:
  A(const A&) = delete;
  A& operator=(const A&) = delete;
}

我想這也會導致相同的結果。 有副作用嗎?

賦予刪除的功能什么訪問權限無關緊要-它根本不存在(¹),因此無論調用者如何都無法訪問。

錯誤消息可能會更加混亂。 例如,參見http://://cpp.sh/9hv7y ,其中第一個錯誤是關於“私人”而不是“已刪除”的。


¹“不存在”是一種簡化。 從某種意義上說,它參與了重載解析,但是如果它是所選函數,那就是一個錯誤。 從而

struct only_double {
    only_double(intmax_t) = delete;
    only_double(double arg);
};
only_double zero(0); // Error - deleted constructor called

暫無
暫無

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

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