【C++ 内存管理】深拷贝和浅拷贝你了解吗?

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;
 // 使⽤默认拷⻉构造函数和赋值操作符
};

3.深拷贝和浅拷贝

在这里插入图片描述

相关推荐

  1. c++拷贝拷贝

    2024-05-11 10:46:11       33 阅读
  2. 拷贝拷贝

    2024-05-11 10:46:11       38 阅读
  3. 拷贝拷贝

    2024-05-11 10:46:11       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-11 10:46:11       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-11 10:46:11       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-11 10:46:11       87 阅读
  4. Python语言-面向对象

    2024-05-11 10:46:11       96 阅读

热门阅读

  1. K8S 删除pod的正确步骤

    2024-05-11 10:46:11       42 阅读
  2. 500行代码实现贪吃蛇(2)

    2024-05-11 10:46:11       23 阅读
  3. 右键使用VSCode打开文件/文件夹目录

    2024-05-11 10:46:11       35 阅读
  4. [openwrt-21.02]MT7981+MT7976 WiFi debug指令

    2024-05-11 10:46:11       54 阅读
  5. 图像处理、计算机视觉和深度学习,区别与联系

    2024-05-11 10:46:11       30 阅读
  6. No row with the given identifier exists 解决方法

    2024-05-11 10:46:11       35 阅读
  7. asp.net结课作业中遇到的问题解决4

    2024-05-11 10:46:11       30 阅读
  8. B+树(B+ Tree)

    2024-05-11 10:46:11       28 阅读