码迷,mamicode.com
首页 > 其他好文 > 详细

                深拷贝与浅拷贝

时间:2016-09-22 18:08:12      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:copy构造函数

浅拷贝:仅仅将需要copy的内存空间的首地址赋值一份,粘贴到另一个指针的内容上,二者在内存上指向的是同一块内存空间

深拷贝:重新开辟空间,将另一个空间的内容赋值的这个空间上,两者的指针是指向不同的内存空间。

  在C++中,假设我们定义了一个name的类,用它构造了两个对象obj1 和 obj2

若我们执行 name obj1 = obj2 且没有自己创建一个copy构造函数时,c++编译器会总动调用默认的copy构造函数,此时是浅拷贝,当执行析购函数时会出现错误;

以下三个语句:

Name obj1("abcdefg");

Name obj2(obj1);

Name obj3 = obj1;

分别从创建了两个对象 obj1 和 obj2,并且将他们赋值,他们的赋值操作是属于浅拷贝,让它们的对象中的指针元素指向了同一块内存空间,即浅拷贝,在执行析构函数时第一次obj2的析购就会释放掉其指针指向的两个类所共有的空间,再次执行析购函数时候就会出现非法访问。

解决方法:

自己编写copy构造函数;

技术分享


                深拷贝与浅拷贝

标签:copy构造函数

原文地址:http://11631662.blog.51cto.com/11621662/1855524

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!