《Effective C++》 读书笔记 条款11-15

Effective C++ 11-15 Note

条款11:在operator=中处理“自我赋值”

确保当对象自我赋值时,拷贝赋值函数有良好的行为。其中的技术包括比较“来源对象”和“目标对象”的地址、精心周到的语句顺序、以及copy-and-swap

比较“来源对象”和“目标对象”:

image-20210312095803082

复制:

image-20210312095932187

pb在new操作之后已经指向了一块新的内存地址,所以delete原来地址也是没问题的。

copy-and-swap:

image-20210312100137094

image-20210312100147959

第一个版本为引用版本,需要利用拷贝构造函数构造一个临时对象,然后让源数据与该临时对象进行交换。

第二个版本为值传递版本,此时传入的参数是拷贝而来的,所以直接让源数据与参数进行交换。

确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确

条款12:复制对象时勿忘其每个成分

copoying函数应该确保复制“对象内的所有成员”及“所有base class”对象

如果你为class添加一个成员变量,你必须同时修改copying函数以及相应的赋值函数

你应该让派生类的copying函数调用相应的基类函数

不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放到第三个函数中,并由两个copying函数共同调用

条款13:以对象管理资源

为防止资源泄漏,请使用RAII对象(资源取得时间便是初始化时机(Resource Acquision Is Initials)),它们在构造函数中获得资源并在析构函数中释放资源

获得资源后立即放进管理对象

管理对象运用析构函数确保资源被释放

两个常用RAII对象分别是tr1::shared_ptr和auto_ptr。前者通常是最佳选择

条款14:在资源管理器中小心copying行为

复制RAII对象必须一并复制它所管理的资源
普遍而常见的RAII class copying行为是:禁止复制、对底层资源使用“引用计数”、复制底层资源、转移底部资源的拥有权

对底层资源使用“引用计数”:需要在类中使用shared_ptr成员变量。可以自定义“删除器”,在引用计数为0的时候被自动调用

复制底层资源:也就是所谓的深拷贝

转移底部资源的拥有权:行为和unique_ptr差不多

条款15:在资源管理器中提供对原始资源的访问

APIs往往要求访问原始资源,所以每一个RAII class应该提供一个“取得其所管理之资源”的方法。
对原始资源的访问可能经有显式转换或隐式转换,一般而言显式转换比较安全

显式转换: 用户自己知道需要一个原始资源,并且调用某些函数得到原始数据。一个好的例子是shared_ptr的get函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值