[C++]现代C++语言核心特性解析 Chapter 10
默认和删除函数(C++11)
1 类的特殊成员函数
- 默认构造函数
- 析构函数
- 复制构造函数
- 复制赋值运算符函数
- 移动构造函数(C++11新增)
- 移动赋值运算符函数(C++11新增)
注意事项
- 声明任何构造函数都会抑制默认构造函数的添加。
- 一旦用自定义构造函数代替默认构造函数,类就将转变为非平凡类型。
2 显示默认和显示删除 C++11
显式默认和显式删除的语法非常简单,只需要在声明函数的尾部添加=default和=delete,它们分别指示编译器添加特殊函数的默认版本以及删除指定的函数。
- =default可以添加到类内部函数声明,也可以添加到类外部。
- =delete与=default不同,它必须添加在类内部的函数声明中,如果将其添加到类外部,那么会引发编译错误。
3 显示删除的其他用法
显式删除不仅适用于类的成员函数,对于普通函数同样有效。只不过相对于应用于成员函数,应用于普通函数的意义就不大了。
显式删除还可以用于类的new运算符和类析构函数。显式删除特定类的new运算符可以阻止该类在堆上动态创建对象,换句话说它可以限制类的使用者只能通过自动变量、静态变量或者全局变量的方式创建对象。
显式删除类的析构函数在某种程度上和删除new运算符的目的正好相反,它阻止类通过自动变量、静态变量或者全局变量的方式创建对象,但是却可以通过new运算符创建对象。当然了,通过new运算符创建的对象也无法通过delete销毁。
4 explicit和=delete
在类的构造函数上同时使用explicit和=delete是一个不明智的做法,它常常会造成代码行为混乱难以理解,应尽量避免这样做。
[C++]现代C++语言核心特性解析 Chapter 10
https://erlsrnby04.github.io/2024/11/01/C-现代C-语言核心特性解析-Chapter-10/