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