要禁用复制构造函数和赋值运算符,很明显我们可以这样做,因为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;
}
我想这也会导致相同的结果。有副作用吗?
答案 0 :(得分:4)
你给删除函数的访问权限并不重要 - 它根本不存在(¹),所以无论调用者是什么都无法访问。
错误消息可能会稍微令人困惑。例如,参见http:://cpp.sh/9hv7y,其中第一个错误是关于“私有”而不是“已删除”。
¹“它不存在”是一种简化。它存在于它参与重载解析的意义上,但如果它是所选择的函数则是错误的。因此
struct only_double {
only_double(intmax_t) = delete;
only_double(double arg);
};
only_double zero(0); // Error - deleted constructor called