目录
4.2.5 深拷贝与浅拷贝(非常重要,视频P110)
深浅拷贝是面试的经典问题。
- 浅拷贝:简单的赋值拷贝操作。
- 深拷贝:在堆区重新申请空间,进行拷贝操作。
浅拷贝、指针/引用 共用的时候,会出现错误。
如果利用编译器提供的拷贝构造函数,会做浅拷贝操作。
浅拷贝带来的问题就是堆区的内存重复释放。
示例:
class Person
{
public:
Person()
{
cout << "Person 无参默认构造函数调用" << endl;
}
Person(int a, int xheight)
{
age = a;
height = new int(xheight);
cout << "Person 有参构造函数调用" << endl;
}
Person(const Person& p)
{
age = p.age;
//height = p.height; // 运行会崩溃,因为堆区重复释放
height = new int(*p.height);
cout << "Person 拷贝构造函数调用" << endl;
}
~Person()
{
// 析构代码,将堆区开辟数据做释放操作
if (height != NULL)
{
delete height;
height = NULL;
}
cout << "Person 析构函数调用" << endl;
}
int age;
int* height;
};
// 浅拷贝、深拷贝
void test01 ()
{
Person p1(20, 175);
cout << "p1的年龄: " << p1.age << " p1的身高为:" << *p1.height << endl;
Person p2(p1);
cout << "p2的年龄: " << p2.age << " p2的身高为:" << *p2.height << endl;
}
int main() {
test01();
system("pause");
return 0;
}
----------------------------------------------------------------------------------
Person 有参构造函数调用
p1的年龄: 20 p1的身高为:175
Person 拷贝构造函数调用
p2的年龄: 20 p2的身高为:175
Person 析构函数调用
Person 析构函数调用
请按任意键继续. . .
相关教程
- 开发环境搭建:Visual Studio 2019 C++开发环境搭建
- 推荐视频:https://www.bilibili.com/video/BV1et411b73Z?from=search&seid=4205594350351753444
- 已投币三连,非常细致的视频教程,感谢up主。