白嫖党联盟

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 活动 交友 discuz
查看: 142|回复: 0

C++深拷贝

[复制链接]

8

主题

11

帖子

15

积分

新手上路

Rank: 1

积分
15
发表于 2023-10-14 20:00:31 | 显示全部楼层 |阅读模式
对于基本类型的数据以及简单的对象,它们之间的拷贝非常简单,就是按位复制内存。例如:
  • class Base{
  • public:
  •     Base(): m_a(0), m_b(0){ }
  •     Base(int a, int b): m_a(a), m_b(b){ }
  • private:
  •     int m_a;
  •     int m_b;
  • };
  • int main(){
  •     int a = 10;
  •     int b = a;  //拷贝
  •     Base obj1(10, 20);
  •     Base obj2 = obj1;  //拷贝
  •     return 0;
  • }


b 和 obj2 都是以拷贝的方式初始化的,具体来说,就是将 a 和 obj1 所在内存中的数据按照二进制位(Bit)复制到 b 和 obj2 所在的内存,这种默认的拷贝行为就是浅拷贝,这和调用 memcpy() 函数的效果非常类似

对于简单的类,默认的拷贝构造函数一般就够用了,我们也没有必要再显式地定义一个功能类似的拷贝构造函数。但是当类持有其它资源时,例如动态分配的内存、指向其他数据的指针等,默认的拷贝构造函数就不能拷贝这些资源了,我们必须显式地定义拷贝构造函数,以完整地拷贝对象的所有数据。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|白嫖党联盟 ( 吉ICP备2022001240号 )

GMT+8, 2024-9-22 01:42 , Processed in 0.054135 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.. 技术支持 by 巅峰设计

快速回复 返回顶部 返回列表