跳到主要内容

简述空类会默认添加哪些东西?怎么写 ?

参考答案:

在C++中,如果一个类没有提供任何构造函数、析构函数、拷贝构造函数、拷贝赋值运算符、移动构造函数或移动赋值运算符,编译器会自动为它生成这些函数,这就是所谓的“缺省函数”或“默认函数”。

对于空类(没有任何成员变量或成员函数的类),编译器会默认添加以下函数:

  1. 默认构造函数(Default Constructor):用于创建类的对象。
  2. 析构函数(Destructor):用于销毁类的对象。
  3. 拷贝构造函数(Copy Constructor):用于用一个已存在的对象来初始化另一个新对象。
  4. 拷贝赋值运算符(Copy Assignment Operator):用于把一个已存在的对象的值赋给另一个已存在的对象。

在C++11及之后的版本中,编译器还会为空类默认添加以下两个函数:

  1. 移动构造函数(Move Constructor):用于用一个即将销毁的对象来初始化另一个新对象。
  2. 移动赋值运算符(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;语法来显式请求编译器生成默认函数。