effective C++

梦想游戏人
目录:
读书笔记
  1. 强制不能   赋值或拷贝构造:copy构造函数 和 copy  assignment 操作符 可声明为private ,并且可以不实现,,如果防止子类拷贝,可private继承 已经禁止了的父类
  2. 没特殊要求,参数等尽量用const
  3. 带多态性质的基类,应该声明一个virtual 析构函数,如果一个类带任何virtual函数,那么应该拥有一个virtual析构
  4. 类的设计目的如果不是作为基类使用,或者为了不具备多态性,那么就不该声明virtual析构函数 
  5. 抽象类时,如果找 不到一个很好的纯虚函数,可考虑吧析构函数 声明为纯许函数
  6. operator = 返回 *this的目的是,为了方便连续=操作,比如 a=b=c;
  7. operator = 中 处理自我 赋值 如 a=a;
  8. copy函数应该确保 对象内所有变量都被安全复制 以及基类
  9. 多个copy函数,公共部分太多,可尝试 提取出来一个private函数
  10. 为防止资源泄露,尽量使用RAII对象,他在构造函数中获得资源,并且在析构中 释放资源
  11. new[] 时候对应delete[]  ,new 对应delete
  12. 导入新类型,以防止接口 被乱用,P79
  13. 好的接口很容易被正确使用,不容易被误用,你应该在你所有的接口中努力达成这些性质
  14. 促进“正确使用 ”的办法包括接口的统一性一致性,以及与内置类型的行为兼容
  15. “阻止误用”的办法包括建立新类型,限制类型上的操作,束缚对象值,消除客户的资源管理责任
  16. class的设计就是type的设计
  17. 传参数包含对象时,尽量使用reference,可避免大量没必要的拷贝等工作,特别是多态的时候,传递会被切割,但STL传值会更适合
  18. 成员变量public 和protect 都会破坏封装性,如果成员变量被改变,那么被破坏的代码,将不可预知
  19. protect并不比public 更有封装性,特别是在多态的情况
  20. 切记成员变量声明为private,这可以赋予客户访问数据的一致性,可细微划分访问控制,允诺约束获得保证,并提供class作者充分实现弹性
  21. 隐式转换可以发生基本类型和自定义类型之间,只要自定义类型有对应的构造函数
  22. 尽可能延后变量等 的定义,因为可能白话析构构造代价,提高程序的清晰度和改善程序效率
  23. 抛出异常前,确认资源已被安全释放
  24. 将inline谨慎使用,限制在小型,经常被调用的函数。可使调试和二进制升级更容易,潜在代码膨胀问题最小化 ,程序速度提升最大化
  25. pImpl            P145 条款:实现 
  26. 支持“编译依存性最小化”的一般构想是,依赖于声明,不要依赖定义,基于此构想的两个手段是handle classes  和 interface classes
  27. 程序库头文件应该以“完全切仅有声明” 的形式存在,这种做法不论是否涉及template都适用
  28. public继承是 is-a 关系,子类对象 也是一个父类对象 ,比如黄种人 是 人 ,所以黄种人可以继承自人
  29. derived class 内的名称 会遮挡 base class 内的名称,在public继承下从来没有人希望如此
  30. 为了被遮挡的名称再见天日,可使用using 声明式或转交函数。
Scroll Up