删除函数声明是 C++11 标准中引入的一种新形式的函数声明。要将函数声明为已删除的函数,您可以附加"=delete";该函数声明末尾的说明符。编译器禁用已删除函数的使用。
如果您想阻止其使用,您可以将隐式定义的函数声明为已删除的函数。例如,您可以将类的隐式定义的复制赋值运算符和复制构造函数声明为已删除函数,以防止该类的对象复制。
class A{
public:
A(int x) : m(x) {}
A& operator = (const A &) = delete; // 声明拷贝赋值操作是删除函数
A(const A&) = delete; // 声明构造拷贝是删除函数
private:
int m;
};
int main(){
A a1(1), a2(2), a3(3);
a1 = a2; // 报错,拷贝赋值已经删除
a3 = A(a2); // 报错,拷贝构造已经删除
}
还可以将不需要的转换构造函数和运算符声明为已删除函数来防止有问题的转换,如:
class B{
public:
B(int)