改变旧有的C习惯:
1. 尽量以const和inline取代#define
2. 尽量以<iostream>取代<stdio.h>
3. 尽量以new和delete取代malloc和free
4. 尽量使用C++风格的注释
内存管理:
5. 使用相同形式的new和delete
6. 记得在destructor中以delete对付pointer member
7. 对内存不足的状况预做准备
8. 撰写operator new和operator delete是应遵循公约
9. 避免遮掩了new的正规形式
10. 如果写了一个operator new对应的也要写一个operator delete
构造函数,析构函数和Assignment运算符:
11. 如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符
12. 在constructor中尽量以initialization动作取代assignment动作
13. initialization list中的members初始化次序应该和其在class内的声明次序相同
14. 总是让base class拥有virtual destructors
15. 令operator=传回“*this的reference”
16. 在operator=中为所有的data members设定(赋值)内容
17. 在operator=中检查是否“自己赋值给自己”
类与函数的设计和声明:
18. 努力让接口完满且最小化
19. 区分member functions,non-member functions和friend functions
20. 避免将data members放在公开接口中
21. 尽可能使用const
22. 尽量使用pass-by-reference(传址)
23. 当你必须传回object时,不要尝试传回reference
24. 在函数重载和参数缺省化之间,谨慎抉择
25. 避免对指针型别和数值型别进行重载
26. 防卫潜伏的(模棱两可)状态
27. 如果不想使用编译器暗自产生的member functions,就应该明白拒绝它
28. 尝试切割global namespace(全局命名空间)
类与函数实现:
29. 避免传回内部数据的handles
30. 避免写出member functions,传回一个non-const pointer或reference并以之指向较低存取层级的members
31. 千万不要传回“函数内local对象的reference”
32. 尽可能延缓变量定义式的出现
33. 明智的运用inlining
34. 将文件之间的编译依赖关系降至最低
继承关系和面向对象设计
35. 确定你的public inheritance模塑出“is-a”关系
36. 区分接口函数和实现继承
37. 绝对不要重新定义继承而来的非虚拟函数
38. 绝对不要定义继承而来的缺省参数值
39. 避免在继承体系中作向下的转型动作
40. 通过layering技术来模塑has-a或is-implemented-in-terms-of的关系
41. 区分inheritance和templates
42. 明智的运用私有继承
43. 明智的运用多继承
44. 说出你的意思并了解你所说的每一句话
杂项讨论:
45. 清楚知道C++编译器为我们完成和调用那些函数
46. 宁愿编译和连接时出错也不要执行时出错
47. 使用non-local static objects之前先确定它已有初值
48. 不要对编译器的警告视为不见
49. 尽量让自己熟悉C++标准库
50. 加强自己对C++的了解