关于c加加11 的预置以及弃置函数,请详细说明
时间: 2023-11-28 21:47:38 浏览: 88
在C++11中,新引入了两个与对象生命周期相关的函数:预置函数和弃置函数。
预置函数(default functions)是指编译器自动生成的默认函数,包括默认构造函数、拷贝构造函数、移动构造函数、拷贝赋值运算符、移动赋值运算符和析构函数。当类中没有显式定义这些函数时,编译器会自动生成它们。
弃置函数(deleted functions)是指被显式删除的函数,例如通过在函数声明或定义后面加上`=delete`来删除一个函数。当一个函数被删除后,任何尝试调用该函数的代码都会导致编译错误。
以下是一些示例:
```c++
class MyClass {
public:
// 默认构造函数
MyClass() = default;
// 拷贝构造函数和拷贝赋值运算符被显式删除
MyClass(const MyClass&) = delete;
MyClass& operator=(const MyClass&) = delete;
// 移动构造函数和移动赋值运算符
MyClass(MyClass&&) = default;
MyClass& operator=(MyClass&&) = default;
// 析构函数
~MyClass() = default;
};
```
上面的示例中,我们使用`=default`关键字来显式声明了默认构造函数、移动构造函数、移动赋值运算符和析构函数,同时使用`=delete`关键字来显式删除了拷贝构造函数和拷贝赋值运算符。这些函数的定义可以被省略,因为它们是由编译器自动生成的。
需要注意的是,当一个类中显式定义了拷贝构造函数、移动构造函数、拷贝赋值运算符或移动赋值运算符时,编译器不会自动生成默认的版本,即使这些函数的定义被省略。因此,如果需要使用默认版本,必须使用`=default`关键字来显式声明。
阅读全文