如果在程序中打开最高级别的编译警告选项,并且在适当的地方加入如下语句
#pragma warning(default: 4511)
#pragma warning(default: 4512)
则编译器会检查那些没有声明“拷贝构造函数”和“赋值操作符重载”的类,并且报告 C4511 和 C4512 编译警告,例如:
class Class1
{
public:
Class1();
virtual ~ Class1();
};
我们只要加上“拷贝构造函数”和“赋值操作符重载”声明即可消除这个警告,并且这样也符合著名的“大三规则”,即:如果一个类需要任何下列的三个成员函数之一,便三者全部要实现,这三个成员函数是:拷贝构造,赋值操作符,析构函数。
class Class1
{
public:
Class1();
virtual ~ Class1();
public:
Class1(const Class1&); // 拷贝构造函数(消除 C4511 编译警告)
Class1& operator=(const Class1&); // 赋值操作重载(消除 C4512 编译警告)
};