=delete
则是C++11引入的一种新特性,用于删除特定的函数,包括构造函数、析构函数、拷贝构造函数、赋值运算符等。通过将函数声明为 =delete
,可以显式地阻止该函数被调用,即使在类内部或者友元函数中也无法使用。
使用 =delete
的场景:
防止拷贝和赋值:
cpp
class NoCopy {
public:
NoCopy() = default;
NoCopy(const NoCopy&) = delete; // 删除拷贝构造函数
NoCopy& operator=(const NoCopy&) = delete; // 删除赋值运算符
};
上面的例子中,通过删除拷贝构造函数和赋值运算符,可以防止该类的对象被复制或者赋值。
禁止特定参数类型的构造:
cpp
class NoInt {
public:
NoInt() = default;
NoInt(int) = delete; // 删除接受 int 参数的构造函数
};
删除默认构造函数:
cpp
class NoDefault {
public:
NoDefault() = delete; // 删除默认构造函数
NoDefault(int value) : data(value) {}
private:
int data;
};
在某些类中,可能希望禁止默认构造函数的生成,而只允许带参数的构造函数。