- 类在没有声明任何构造 或 声明了一个无参构造时;系统会默认生成一个无参构造 如下调用是可以的:Test test; 或 Test test2();
- 一旦声明了有参构造,默认生成的无参构造将失效,这样调用(Test test;)会报错,
除非手动声明无参构造(Test(){}) 或者 Test() = default;
- default只能用于6个特殊成员函数,但delete可用于任何成员函数
- 为什么要加=default?
- =default 来要求编译器生成默认构造函数,仅仅是因为我们既需要其他形式的构造函数,
也需要默认的构造函数去默认初始化成员变量
- =default 来要求编译器生成默认构造函数,仅仅是因为我们既需要其他形式的构造函数,
- =default与默认构造函数是什么关系呢?
- 默认构造函数去掉函数体,在参数列表括号后面加上=default;来显式的要求编译器合成一个函数体,默认初始化成员变量
delete
- 删除默认函数
- Test(const Test& t) = delete; // 显式删除拷贝构造函数
- Test t2(t1); // 无法通过编译
- 禁止拷贝构造函数的使用, 在C++11中,只要在函数的定义或者声明后面加上”= delete”就能实现这样的效果(相比较,这种方式不容易犯错,且更容易理解)