当我在写一个类时(比如class nocopy
),是否可以完全阻止复制操作符的存在?如果我没有定义一个,而其他人写了类似的东西
nocopy A;
nocopy B;
A = B;
编译器会自动生成一个定义。如果我自己定义一个,我会阻止编译器自动生成,但上面的代码仍然是合法的。
我希望上面的代码是非法的,并产生一个编译时错误。我该怎么做?
最佳答案
你只是用 private
访问说明符声明了一个复制构造函数,甚至没有定义它。
任何尝试使用它的人都会得到一个编译错误,因为它被声明为 private
。
如果有人间接使用它,你会得到一个链接错误。
在 C++03 中你不能做更多的事情。
但是,在 C++11 中,您可以 Explicitly delete special member functions 。
例如:
struct NonCopyable {
NonCopyable & operator=(const NonCopyable&) = delete;
NonCopyable(const NonCopyable&) = delete;
NonCopyable() = default;
};
关于c++ - 禁用编译器生成的复制赋值运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7823845/