一个class如果没有申明构造函数,编译器会按需自动生成构造函数。
默认的构造函数有:
构造函数,拷贝构造函数 ,拷贝赋值运算符 (c++11后:)移动构造函数,移动赋值运算符
如果有些构造函数我们不想让他运行,老的办法可通过申明它为private来规避运行;
在C++11后,加上delete标识符就可以
class CBase
{
public:
CBase() = default;
CBase(const CBase&) = delete; //默认不能拷贝构造
int nBase{0};
};
int main()
{
CBase CA;
CBase CB(CA);
return 0;
}
编译会报错:
error C2280: 'CBase::CBase(const CBase &)' : attempting to reference a deleted function