C++11可以通过=delete将编译器默认生成的函数,显示的进行删除:
class A{
public:
A(){}
A(const A&)=delete; //将编译器默认生成的拷贝构造函数删除
};
int main(){
A a1;
A a2 = a1; //默认拷贝构造函数已被删除,编译错误
return 0;
}
=delete不仅可以显示删除类默认函数,还可以用于显示删除普通函数的某个版本:
void f(int){}
void f(char)=delete; //显示删除参数为char的版本
int main(){
f(1);
f('1'); //编译错误,参数为char的版本被删除
return 0;
}