您的位置:首页 > 编程语言 > C语言/C++

Effective C++

2007-03-21 13:35 190 查看
Effective C++

改变旧有的C习惯
1. 尽量用const & inline 代替 #define。
2. 尽量用<iostream> 代替 <stdio.h>。
3. 尽量使用new & delete 替代 malloc & free。
4. 尽量使用C++的注释风格。

内存管理
5. 使用相同形式的new & delete
6. 记得在destructor中以delete 对付 pointer members。
7. 为内存不足的情况做准备。
8. 重载operator new & operator delete 应遵循的公约:你的函数行为应该与缺省的operator new 保持一致。
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 destructor。
15. 令operator = 传回*this的reference。
16. 在operator = 中为所有的data members 设定(赋值)内容。
17. 在operator = 中检查是否“自己赋给自己”。

类与函数的设计和声明
18. 努力让接口完满且最小。
19. 区分member functions, non-member function 和 friend functions三者。
20. 避免将data member 放在了公共的接口中。
21. 尽可能的使用const。
22. 尽量使用pass-by-reference,少用pass-by-value。
23. 当你使用传回object时,不要尝试传回reference。
24. 在函数重载和参数缺省化之间,谨慎抉择。
25. 避免对指针类型和数值类型进行重载。
26. 防卫潜伏的ambiguity(模凌两可)状态。
27. 如果不想使用编译器暗自产生的member functions 你就应该明白拒绝它。
28. 尝试切割global namespace(全局的命名空间)。

类与函数之实现
29. 避免传回内部的handles。
30. 避免写出member functions,传回一个non-const pointer 或reference 并以之指向较低存取层级的members。
31. 千万不要传回“函数内local对象的reference 或函数内部以new 获得的指针所指的对象。
32. 尽可能的延缓变量定义式的出现。
33. 明智的使用inlining
34. 将文件之间的编译关系降至最低。(compilation dependence)

继承关系与面向对象的设计
35. 确定你的public inheritance,模塑出”isa”的关系。
36. 确定你的接口继承(interface inheritance)和实现继承(implementation inheritance)。
37. 绝对不要重新定义继承而来的非虚拟函数。
38. 绝对不要重新定义继承而来的缺省参数值。
39. 避免在继承体系中做向下转型(cast down)的动作。
40. 通过layering技术来模塑has-a 或 is-implemented-in-terms-of的关系。
41. 区分inheritance 和 templates。
42. 明智的运用private inheritance。
43. 明智地运用多继承。
44. 说出你的意思并了解你说的每一句话。

杂项讨论
45. 清楚的知道C++(编译器)默默的为我们完成和调用那些函数。
46. 宁愿编译和链接时出错,也不要执行时才错。
47. 使用not-local static objects之前要先确定它已经有初值了。
48. 不要对编译器的警告信息视而不见。
49. 尽量让自己熟悉C++的标准程序库。
50. 加强对C++的了解。




输入您的搜索字词
提交搜索表单
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: