`

深复制与浅复制

    博客分类:
  • c++
 
阅读更多
2者主要区别:是否为成员变量分配新内存空间
复制构造函数有2种:深复制与浅复制
当将一个对象A复制给另一个对象B时,系统会调用复制构造函数
编译器默认的复制构造函数是浅拷贝,它将原对象的每一个成员变量复制到新对象的成员变量中去。因而最后两个对象的变量均指向相同的数据成员的内存地址。
当数据成员中没有指针时,浅拷贝是可行的。
但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址M,当程序中删除一个对象A时,析构函数会释放掉指针变量所指向的那块内存空间M,而对象B的指针变量仍然指向该空间M,而此时该空间已不存在,因而导致指针悬挂现象。
所以,这时,必须采用深拷贝,创建自己的复制构造函数。 我们自己来为我们的成员变量分配新内存,这样一个对象在析构后只是删除自己相关的内存空间,而不会影响到另一个对象。
深拷贝与浅拷贝的区别就在于深拷贝会在堆内存中另外申请空间来储存数据,从而也就解决了指针悬挂的问题。
简而言之,当数据成员中有指针时,必须要用深拷贝。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics