C++浅拷贝和深拷贝问题(一)(重要!)

首先明确什么是浅拷贝:一个类至少提供四种方法1

1.默认构造

2.析构函数

3.拷贝构造

4.赋值运算符operator=

这里的3拷贝构造和4operator=方法,就是直接用“=”号来对数据赋值,也就是浅拷贝

但是如果数据是开辟在堆区(new)那么如果是单纯的用等号来赋值的话,在析构函数中释放堆区数据的时候会报错,为什么呢?

下面是具体错误的代码:

C++浅拷贝和深拷贝问题(一)(重要!)

 

 C++浅拷贝和深拷贝问题(一)(重要!)

 

 

下面是原理图

C++浅拷贝和深拷贝问题(一)(重要!)

 

 

 解决代码(重写拷贝构造):

C++浅拷贝和深拷贝问题(一)(重要!)

 

 解决原理图

C++浅拷贝和深拷贝问题(一)(重要!)

 

C++浅拷贝和深拷贝问题(一)(重要!)

上一篇:DotNetBar的初步使用


下一篇:MVC中IQueryable与IList的区别?