拷贝构造函数
重点:调用时机
难点:深拷贝和浅拷贝
初步了解
什么是拷贝构造函数
- c++独有
- 用于:用一个对象去构造或初始化另一个对象
- 特点:第一个参数必须是当前类的对象的引用
- 没有写拷贝构造,系统提供
- 用’=’
定义拷贝构造函数
调用时机
- 用一个对象初始化另一对象
创建对象的同时,使用另一个同类对象初始化Mark obj_2=obj_1;
(创建对象且初始化–隐式调用) - 用一个对象直接构造另一对象
直接通过一个现有的对象,创建新的对象,并且有其他参数Mark obj_2(obj_1,1,2);
(函数传参调用–显式调用) - 类的函数作函数参数(只有对象才会调用拷贝构造函数)
//定义一个普通的全局函数,参数表中有类的对象
void fun(Mark obj)
{
cout <<"fun is been used"<<endl;
}
fun(obj_1);
- 函数返回值是类的对象
Mark fun2()
{
Mark obj;
return obj;//将obj拷贝构造出去
}
fun2();
Mark obj_1=fun2();//将fun2的返回值拷贝构造给obj_1,并析构。
Mark obj_2;
obj_2=fun2();
深拷贝与浅拷贝
浅拷贝
在拷贝函数中,将对应属性一一赋值的操作
指针 堆区指针 指向堆区同一地址
"无脑抄袭”
深拷贝
普通数据一一赋值
对于指针重新分配内存
“致敬经典”