C++中ShallowCopy和DeepCopy的区别

C++中ShallowCopy和DeepCopy的区别


A shallow copy of an object copies all of the member field values. This works well if the fields are values, but may not be what you want for fields that point to dynamically allocated memory. The pointer will be copied, but the memory it points to will not be copied – the field in both the original object and the copy will then point to the same dynamically allocated memory, which is not usually what you want. The default copy constructor and assignment operator make shallow copies.

std::vector is a typical shallow copy mode. When use push_back to add element, if the element is value, it will copy the value to std::vector. However, if the element is a pointer to allocated memory, it will add the same pointer to std::vector, instead of copy the allocated memory.

A deep copy copies all fields, and makes copies of dynamically allocated memory pointed to by the fields. To make a deep copy, you must write a copy constructor and overload the assignment operator, otherwise the copy will point to the original, with disasterous consequences.

Deep copies need …

If an object has pointers to dynamically allocated memory, and the dynamically allocated memory needs to be copied when the original object is copied, then a deep copy is required.

A class that requires deep copies generally needs:
•A constructor to either make an initial allocation or set the pointer to NULL.
•A destructor to delete the dynamically allocated memory.
•A copy constructor to make a copy of the dynamically allocated memory.
•An overloaded assignment operator to make a copy of the dynamically allocated memory.


原始网页:
http://fredosaurus.com/notes-cpp/oop-condestructors/shallowdeepcopy.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值