文章目录
- 1.深拷贝
- 2.浅拷贝
- 3.深拷贝和浅拷贝
1.深拷贝
🍎
深拷⻉:
是对对象的完全独⽴复制,包括对象内部动态分配的资源。在深拷⻉中,不仅复制对象的值,还会复制对象所指向的堆上的数据
。
特点:
🐧① 复制对象及其所有成员变量的值。
🐧②动态分配的资源也会被复制,新对象拥有⾃⼰的⼀份资源副本。
- 深拷贝通常涉及到
⼿动分配内存
,并在拷⻉构造函数或赋值操作符中进⾏资源的复制。
class DeepCopyExample {
public:int *data;DeepCopyExample(const DeepCopyExample &other) {// ⼿动分配内存并复制数据data = new int(*(other.data));}~DeepCopyExample() {// 释放动态分配的资源delete data;}DeepCopyExample& operator=(const DeepCopyExample &other) {// 复制数据if (this != &other) {delete data;data = new int(*(other.data));}return *this;}
};
2.浅拷贝
🍎
浅拷⻉:
浅拷⻉仅复制对象的值
,⽽不涉及对象内部动态分配的资源。在浅拷⻉中,新对象和原对象共享相同的资源,⽽不是复制⼀份新的资源。
特点:
🐧① 复制对象及其所有成员变量的值。
🐧②对象内部动态分配的资源不会被复制,新对象和原对象共享同⼀份资源。
- 浅拷⻉通常使⽤默认的拷⻉构造函数和赋值操作符,因为它们会逐成员地复制原对象的值。
class ShallowCopyExample {
public:int *data;// 使⽤默认拷⻉构造函数和赋值操作符
};