在 C++11 中引入了 default
和 delete
关键字,它们用于显式地控制类的默认成员函数的生成和删除。
default
关键字:
default
关键字用于显式要求编译器生成默认的特殊成员函数(默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符和移动赋值运算符),即使在用户声明了其他自定义构造函数或拷贝控制成员函数的情况下。
示例:
class MyClass {
public:
// Default constructor
MyClass() = default;
// Copy constructor
MyClass(const MyClass& other) = default;
// Move constructor
MyClass(MyClass&& other) = default;
// Copy assignment operator
MyClass& operator=(const MyClass& other) = default;
// Move assignment operator
MyClass& operator=(MyClass&& other) = default;
// Destructor
~MyClass() = default;
};
在上面的示例中,使用 = default;
来显式声明了所有特殊成员函数的默认实现。如果没有显式声明这些函数,编译器会自动合成它们。使用 = default;
可以确保这些函数被生成,即使类中有其他的自定义成员函数。
delete
关键字:
delete
关键字用于禁用类的特殊成员函数或普通成员函数,以及禁止特定的函数重载。
示例:
class MyClass {
public:
// Default constructor
MyClass() = default;
// Delete copy constructor
MyClass(const MyClass& other) = delete;
// Delete copy assignment operator
MyClass& operator=(const MyClass& other) = delete;
// Normal member function
void doSomething();
// Deleted member function
void doSomethingElse() = delete;
};
在上面的示例中,使用 = delete;
将拷贝构造函数和拷贝赋值运算符声明为删除的,这意味着这两个函数不能被调用或者用于对象。
总结:
default
关键字用于告诉编译器生成默认的特殊成员函数。delete
关键字用于禁用特定的成员函数或函数重载。
这些关键字提供了更精确的控制能力,可以使代码更清晰和安全。