C++中,编译器会默认为自定义类生成:
- 默认构造函数
- 拷贝构造函数
- 移动构造函数
- 拷贝赋值函数
- 移动赋值函数
- 析构函数
如果用户自己定义了这些函数,编译器就不会再产生默认版本:
class A{
public:
A(int a){} //定义了构造函数,编译器便不会生成默认构造函数
};
int main(){
A a1(0);
A a; //无默认构造函数,无法编译
return 0;
}
C++11,可以通过=default,要求编译器产生默认版本:
class A{
public:
A(int a){}
A()=default;
};
int main(){
A a1(0); //通过自定义构造函数构造
A a; //通过默认构造函数构造
return 0;
}