700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c/c++教程 - 2.4.2.5 深拷贝和浅拷贝 堆区内存重复释放

c/c++教程 - 2.4.2.5 深拷贝和浅拷贝 堆区内存重复释放

时间:2022-05-28 06:35:55

相关推荐

c/c++教程 - 2.4.2.5 深拷贝和浅拷贝 堆区内存重复释放

目录

4.2.5 深拷贝与浅拷贝(非常重要,视频P110)

相关教程

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的身高为:175Person 拷贝构造函数调用p2的年龄: 20 p2的身高为:175Person 析构函数调用Person 析构函数调用请按任意键继续. . .

相关教程

开发环境搭建:Visual Studio C++开发环境搭建推荐视频:/video/BV1et411b73Z?from=search&seid=4205594350351753444已投币三连,非常细致的视频教程,感谢up主。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。