effective c++ 04 --设计与声明

东阳的学习记录

条款18:让接口容易被正确使用、不易被误用

  1. 接口设计要清晰无歧义,能让用户知晓每一个参数的含义以及使用目的、方法
  2. “促进正确使用” 的方法包括接口的一致性,以及与内置类型的行为兼容
  3. “阻止误用” 的方法有:
    i 建立新类型、限制类型上的操作
    ii 束缚对象值
    iii 消除客户的资源管理责任
  4. shared_ptr 支持定制型删除器。这可防范DDL问题,可被用来自动解除互斥锁等等

条款19:设计 class 犹如设计 type

  1. 新 type 如何创建和销毁?
  2. 对象的初始化和复制有何区别?
  3. 新 type 对象如果被 pass-by-value, 意味着什么?
  4. 什么是 type 的合法值?
  5. 你的新 type 需要配合某个继承图系吗?
  6. 你的新 type 需要什么样的类型转换?
  7. 什么样的操作符和函数对于新 type 是合理的?
  8. 什么样的标准函数应该被驳回?(那正是你必须声明为 private 者)
  9. 谁该取用新 type 的成员?
  10. 新 type 有多么一般化?、
  11. 你真的需要一个新 type 吗?

条款20:以 const & 传递参数 代替 value

  1. 以 const & 传递可以回避构造析构成本。
  2. 以const & 传递参数可以防止对象被切割。若以值传递,将会使得派生类中属于派生类独有的那一部分被阉割
  3. 对于内置类型,STL的迭代器和函数对象使用值传递更加高效

条款21:必须返回对象时,不要妄想返回其引用

  1. 不要返回局部栈对象的引用,否则会造成空悬指针
  2. 返回堆对象的引用也是一个坏主意

记住:
永远不要返回局部对象的引用或指针, 永远不要返回堆对象的引用, 永远不要返回指针或引用指向一个 local static 对象而有可能同事需要多个这样的对象。

条款22:将成员变量声明为private

  1. 通过函数统一控制,能够实施精准的访问控制
  2. 方便以后更改代码以及维护
  3. 可用计算替代保存值,视实际情况选择
  4. 就封装性来说,protected与public一样
  5. 封装性与“当其内容改变时可能造成的代码破坏量成反比”

条款23:宁以 non-member、non-friend替换member函数

  1. 使用非成员函数,能降低编译依存度,带来更大的封装性
  2. 我们使用封装的原因,使我们的改变影响更少的人
  3. 非成员函数提供更大的封装性,因为其不可访问 private 成员
  4. 将不同功能置于多个头文件中

条款24:若所有参数皆需类型转换,请采用 non-member 函数

  1. 任何时候,能避免使用 friend 函数就应该避免
  2. 如果你需要对所有的参数(包括 this 所指的隐喻参数)进行类型转换,那么这个函数必须是非成员函数。

条款25:考虑写出一个不抛异常的swap函数

  1. 如果你希望你的软件有预期的效果,不要往std命名空间添加任何东西

记住:

  1. 当std::swap对你的类型效率不高时,提供一个swap成员函数并确保这个函数不抛异常
  2. 如果你提供了一个成员的swap,就应该提供一个 non-member swap 用来调用前者,对于class(而不是模板),请特化 std::swap
  3. 调用第二步中的swap时,使用using std::swap将 std空间中的swap添加到作用域中
  4. 为 “用户定义类型“ 进行 std templates 全特化是好的,但是千万不要在 std 中加入任何全新的东西
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东阳z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值