1. private
将复制构造函数和赋值运算符的可见性声明为 private,可以防止它们被外部调用。
class TestClass {
private:
TestClass(const TestClass &); // 复制构造函数
TestClass & operator=(const TestClass &); // 赋值运算符
public:
...
};
2. delete
在 C++11 中,我们可以在复制构造函数和赋值运算符后面加上 delete 关键字来达到这个目的。将带有 delete 关键字的复制构造函数的可见性设为 public 更好,因为在这种情况下调用复制构造函数的话,编译器会给出明确的错误消息。
class TestClass {
public:
TestClass(const TestClass &) = delete; // 复制构造函数
TestClass & operator=(const TestClass &) = delete; // 赋值运算符
...
};