构造函数调用规则
- 定义有参构造函数
- 不再提供默认无参构造,会提供默认拷贝构造
- 定义拷贝构造
- 不提供其他构造函数??
- 不提供优先级低的,但是提供优先级更高的
- 必须自己定义优先级更低的构造函数
- 默认优先级顺序是:无参、有参、拷贝构造函数
深拷贝 浅拷贝
- 成员变量
- int *a;
- 堆区创建变量
- a = new int(b);
- *a:解引用
- 析构函数
if (a != NULL)
{
delete a;
a = NULL;
}
释放堆区开辟的数据
- 浅拷贝会导致堆区内存重复释放
如何解决:深拷贝
自己实现拷贝构造函数
a = new int(*p.a);
解引用之后开辟新的堆区空间,赋值给a
初始化列表
- 在无参构造函数的括号后面:属性名(值),属性名(值)...
- 在有参构造函数的括号后面:属性名(参数名),属性名(参数名)...
注意冒号