Effective C++读书笔记——item11(自赋值)

自赋值相关问题

  1. 自赋值情况示例
    • 明显的自赋值如w = w,还有不太容易辨别的情况,像a[i] = a[j](当ij值相同)、*px = *py(当pxpy指向同一对象)等,这些是由别名(有多种引用对象的方式)造成的,尤其在涉及引用、指针操作同类型多个对象以及继承体系中基类和派生类对象引用、指针转换时要考虑自赋值可能。
  2. 自赋值在资源管理类中的隐患
    • Widget类持有指向动态分配位图的裸指针pb为例,若operator=实现时未考虑自赋值情况,像最初不安全的实现:先delete pbnew Bitmap(*rhs.pb),当*thisrhs是同一个对象时,会导致删除了不该删除的资源(同时破坏了rhs的资源),最终使对象持有指向已删除对象的 “有毒” 指针。
    • Widget&
      Widget::operator=(const Widget& rhs)              // unsafe impl. of operator=
      {
        delete pb;                                      // stop using current bitmap
        pb =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值