目录
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主。相关教程