深拷贝与浅拷贝

  • 特点

    • 浅拷贝会拷贝指针的值,与被拷贝的指针指向同一块内存

    • 深拷贝不会拷贝指针的值,但会创建一块新的内存,让指针指向

    • 编译器的拷贝构造默认是浅拷贝,若一个类同时需要深拷贝与浅拷贝,需要重载拷贝构造函数,可以将其中的参数声明为引用类型,使其变为移动构造函数

  • 浅拷贝

    • 优点

      • 拷贝效率高

    • 缺点

      • 若浅拷贝了一个指针 ptr,那么该 ptr 所指的内存区域可能会被多次释放,拷贝对象和被拷贝对象都有可能在析构时释放 ptr,第二次释放时会引起undefined behavior

        解决方法:

        1. 将该浅拷贝函数改为移动构造函数,但需确保被拷贝的对象不再使用

        2. 使用智能指针 shared_ptr 防止多次释放

      • 若两个对象 ab,将 a 赋值给 b 时,若b原本的内存没有释放,就会造成内存泄漏,同时 b 的内容也会失效,之后再次访问就可能会出错

  • 深拷贝

    • 优点:安全,不用担心出错

    • 缺点:拷贝效率低

  • 关于深浅拷贝,通常能与值和引用相关,在 C++ 新标准中也会与移动语义相关

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值