-
C++98/03
- 如果用户未声明默认构造函数,编译器将生成一个默认构造函数。(default constructor)
- 如果用户未声明拷贝构造函数,编译器将生成一个拷贝构造函数。(copy constructor)
- 如果用户未声明赋值运算符,编译器将生成一个赋值运算符。(copy assignment operator)
- 如果用户未声明析构函数,编译器将生成一个析构函数。(destructor)
以上函数仅在需要的时候由编译器生成,如果用户不需要,则不生成。
-
C++11(C++14也成立)
- 如果发生以下情况,编译器将生成移动构造函数(move constructor)
- 用户未声明拷贝构造函数(copy constructor)
- 用户未声明拷贝赋值运算符(copy assignment operator)
- 用户未声明移动赋值运算符(move assignment operator)
- 用户未声明析构函数(destructor)
- 该类未被标记为已删除(delete)
- 所有成员均为可移动的(moveable)
- 如果发生以下情况,编译器将生成移动赋值运算符(move assignment operator)
- 用户未声明拷贝构造函数(copy constructor)
- 用户未声明拷贝赋值运算符(copy assignment operator)
- 用户未声明移动构造函数(move constructor)
- 用户未声明析构函数(destructor)
- 该类未被标记为已删除(delete)
- 所有成员均为可移动的(moveable)
- 如果发生以下情况,编译器将生成移动构造函数(move constructor)
-
举例
class Thing { public: Thing(); // default constructor Thing(const Thing&); // copy c'tor Thing& operator=(const Thing&); // copy-assign ~Thing(); // d'tor // C++11: Thing(Thing&&); // move c'tor Thing& operator=(Thing&&); // move-assign };
译自:What are all the member-functions created by compiler for a class? Does that happen all the time?