C++11中,特种成员函数的机制如下:
- 默认构造函数: 与C++98的机制相同。仅当类中不包含用户声明的构造函数时生成。
- 析构函数: 与C++98的机制基本相同,区别在于析构函数默认为
noexcept
。与C++98的机制相同,仅当基类的析构函数为虚的,派生类的析构函数才是虚的。 - 复制构造函数: 运行期行为与C++98相同:按成员进行非静态数据成员的复制构造。仅当类中不包含用户声明的复制构造函数时才生成。如果该类声明了移动操作,则复制构造函数将被删除。在已经存在复制赋值运算符或析构函数的条件下,仍然生成复制构造函数是被废弃的行为。
- 复制赋值运算符: 运行期行为与C++98相同:按成员进行非静态数据成员的复制构造。仅当类中不包含用户声明的复制赋值运算符时才生成。如果该类声明了移动操作,则复制赋值运算符将被删除。在已经存在复制构造函数或析构函数的条件下,仍然生成复制赋值运算符是被废弃的行为。
- 移动构造函数和移动赋值运算符: 都按成员进行非静态数据成员的移动操作。仅当类中不包含用户声明的复制操作,移动操作和析构函数时生成。
成员函数模板在任何情况下都不会抑制特种成员函数的生成。