《Effective_C++》读书笔记3

条款11、在operator= 中处理“自我赋值”
1)确保当对象自我赋值时operator= 良好行为。其中技术包括比较“来源对象”和“

目标对象”的地址、精心周到的语句顺序、以及copy-and-swap.
2)确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象是,其行为依然正确

条款12、复制对象时勿忘其每一个成分
1)Copying函数应该确保复制“对象内的所有成员变量”及“所有base class成分”
2)不要尝试以某个copying函数实现另一个copying函数。应该将共同机能放进第三个函数中,并由两个copying函数共同调用

条款13、以对象管理资源
1)为防止资源泄漏,请使用RAII对象,它们在构造函数中获取资源并在析构函数中释放资源。
2)两个常被使用的RAII classes 分别是trl::shared_ptr 和auto_ptr.前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它执向null.

条款14、在资源管理类中小心coping行为
1)复制RAII对象必须一并复制它管理的资源,所以资源的coping行为决定RAII对象的coping行为。
2)普遍而常见的RAII class coping 行为是:抑制coping、施行引用计数法。不过其他行为也都可能实现。

条款15、在资源管理类中提供对原始资源的访问
1)APIs往往要求访问原始资源,所以每个RAII class应该提供一个“取得其所管理之资源”的方法
2)对原始资源的访问可能经由显式转换或者隐式转换。一般而言显式转换比较安全,但是隐式转换对客户比较方便。


条款16、成对使用new和delete时要采取相同形式
1)如果你在new表达中使用[],必须在相应的delete表达中也使用[]。如果你在new表达式中不使用[],一定要在相应的delete表达中使用[].


条款17、以独立的语句将newed对象置入智能指针
1)以独立语句将newed对象储存()智能指针内。如果不这样做,一旦异常被抛出,又要可能导致难以察觉的资源泄漏。

条款18、让接口容易被正确使用,不易被使用
1)好的接口很容易被正确使用,不容易被误用。你应该在的所有接口中努力达成这些性质。
2)“促使正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。
3)”促进正确使用“的办法包括建立新类型,限制类型上的操作,束缚对象值,已经消除客户的资源管理责任。
4)tr1::shared_ptr支持定制删除器。这可防范DLL问题,可被用来自动解除互斥锁。

条款19、设计class犹如设计type
1)class的设计就是type的设计。在定义一个新type之前,请确定你已经考虑过条款覆盖所有的讨论主题。

条款20、宁以pass-by-reference-to-const替换pass-by-value
1)尽量以pass-by-reference-to-const替换pass-by-value。前者通常高效,并可避免切割问题。
2)以上规则并不适用于内置类型,以及STL的迭代器和函数对象。对他们而言,pass-by-value比较合适。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值