简述空类会默认添加哪些东西?怎么写 ?
参考答案:
在C++中,如果一个类没有提供任何构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数或移动赋值运算符,编译器会自动为它生成这些函数,这就是所谓的“缺省函数”或“默认函数”。
对于空类(没有任何成员变量或成员函数的类),编译器会默认添加以下函数:
- 默认构造函数(Default Constructor):用于创建类的对象。
- 析构函数(Destructor):用于销毁类的对象。
- 拷贝构造函数(Copy Constructor):用于用一个已存在的对象来初始化另一个新对象。
- 拷贝赋值运算符(Copy Assignment Operator):用于把一个已存在的对象的值赋给另一个已存在的对象。
在C++11及之后的版本中,编译器还会为空类默认添加以下两个函数:
- 移动构造函数(Move Constructor):用于用一个即将销毁的对象来初始化另一个新对象。
- 移动赋值运算符(Move Assignment Operator):用于把一个即将销毁的对象的值赋给另一个已存在的对象。
空类的默认函数可以写成如下形式:
class Empty {
public:
Empty() = default; // 默认构造函数
~Empty() = default; // 析构函数
Empty(const Empty&) = default; // 拷贝构造函数
Empty& operator=(const Empty&) = default; // 拷贝赋值运算符
Empty(Empty&&) = default; // 移动构造函数
Empty& operator=(Empty&&) = default; // 移动赋值运算符
};
这些默认函数通常不需要在代码中显式定义,除非你需要改变它们的行为。注意,在C++11及之后的版本中,你可以使用= default;
语法来显式请求编译器生成默认函数。