Effective C++中的条款

原创 2006年05月18日 15:37:00

改变旧有的C习惯:(shifting from C to C++)
1. 尽量以const和inline取代#define(prefer const and inline to define)
2. 尽量以<iostream>取代<stdio.h>(prefer iostream to stdio.h)
3. 尽量以new和delete取代malloc和free(prefer new and delete to malloc and free)
4. 尽量使用C++风格的注释(prefer C++ style commnents)
内存管理:(memory management)
5. 使用相同形式的new和delete(Use the same form in corresponding uses of new and delete)
6. 记得在destructor中以delete对付pointer member(Use delete on pointer member in destructors)
7. 对内存不足的状况预做准备(Be prepared for out-of-memory conditions)
8. 撰写operator new和operator delete是应遵循公约(Adhere to convention when writing operator new and delete)
9. 避免遮掩了new的正规形式(Avoid hiding the new)
10. 如果写了一个operator new对应的也要写一个operator delete(Write operator delete if you write operator new)
构造函数,析构函数和Assignment运算符:(Constructors, Destructors, and Assignment Operators)
11. 如果class内动态配置有内存,请为此class声明一个copy constructor和一个assignment运算符(Declare a copy constructor and an assignment operator for class with dynamically allocated memory)
12. 在constructor中尽量以initialization动作取代assignment动作(Prefer initialization to assignment in constructors)
13. initialization list中的members初始化次序应该和其在class内的声明次序相同(List members in an initialization list in the order in which they are declared)
14. 总是让base class拥有virtual destructors(Make sure base class have virtual destructors)
15. 令operator=传回“*this的reference”(Have operator= return a reference to *this)
16. 在operator=中为所有的data members设定(赋值)内容(Assign to all data members in operator=)
17. 在operator=中检查是否“自己赋值给自己”(Check for assignment to self in operator=)
类与函数的设计和声明:(Classes and Funcations: Design and Declaration)
18. 努力让接口完满且最小化(Strive for class interfaces that are complete and minimal)
19. 区分member functions,non-member functions和friend functions(Differentiate among member of functions, non-member functions, and friend functions)
20. 避免将data members放在公开接口中(Avoid data members in the public interface)
21. 尽可能使用const(Use const whenever possible)
22. 尽量使用pass-by-reference(传址)(Prefer pass-by-reference to pass-by-value)
23. 当你必须传回object时,不要尝试传回reference(Don't try to return a reference when you must return an object)
24. 在函数重载和参数缺省化之间,谨慎抉择(Choose carefully between function overloading and parameter defaulting)
25. 避免对指针型别和数值型别进行重载(Avoid overloading on a pointer and a numerical type)
26. 防卫潜伏的(模棱两可)状态(Guard against potential ambiguity)
27. 如果不想使用编译器暗自产生的member functions,就应该明白拒绝它(Explicitly disallow use of implicitly generated member functions you don't want)
28. 尝试切割global namespace(全局命名空间)(Partition the global namespace)
类与函数实现:(Classes and Functions: Implementation)
29. 避免传回内部数据的handles(Avoid returning)
30. 避免写出member functions,传回一个non-const pointer或reference并以之指向较低存取层级的members(Avoid member functions that return non-const pointer or references to members less accessible than themselves)
31. 千万不要传回“函数内local对象的reference”(Never return a reference to a local object or to a dereferenced pointer initialized by new with in the function)
32. 尽可能延缓变量定义式的出现(Postpone varible definitions as long as possible)
33. 明智的运用inlining(Use inlining judiciously)
34. 将文件之间的编译依赖关系降至最低(Minimize compilation dependencies between files)
继承关系和面向对象设计(Inheritance and object-Oriented Design)
35. 确定你的public inheritance模塑出“is-a”关系(Make sure public inheritance models)
36. 区分接口函数和实现继承(Differentiate between inheritance of interface and inheritance of implementaion)
37. 绝对不要重新定义继承而来的非虚拟函数(Never redefine an inherited nonvitual function)
38. 绝对不要定义继承而来的缺省参数值(Never redefine an inherited default parameter value)
39. 避免在继承体系中作向下的转型动作(Avoid casts down the inheritance hierarchy)
40. 通过layering技术来模塑has-a或is-implemented-in-terms-of的关系(Model)
41. 区分inheritance和templates(Differentiate between inheritance and templates)
42. 明智的运用私有继承(Use private inheritance judiciously)
43. 明智的运用多继承(Use muliple inhertance judiciously)
44. 说出你的意思并了解你所说的每一句话(Say what you mean; understand what you're saying)
杂项讨论:(Miscellany)
45. 清楚知道C++编译器为我们完成和调用那些函数(Know what function C++ silently writes and calls)
46. 宁愿编译和连接时出错也不要执行时出错(Prefer compile-time and line-time errors to runtime errors)
47. 使用non-local static objects之前先确定它已有初值(Ensure that non-local static objects are initialized before they're used)
48. 不要对编译器的警告视为不见(Pay attention to compiler warnings)
49. 尽量让自己熟悉C++标准库(Familiarize yourself with the standard library)
50. 加强自己对C++的了解(Improve your understanding of C++)

《Effective C++》:条款28-条款29

条款28避免返回handles指向对象内部成分:指的是不能返回对象内部数据/函数的引用、指针等。 条款29为异常安全而努力是值得的:指的是要有异常处理机制,避免发生异常时造成资源泄露等问题。...
  • KangRoger
  • KangRoger
  • 2015年02月19日 19:47
  • 1393

Effective C++ 条款2

尽量以const、enum、inline替换#define首先,大家要明白一个道理。#define是什么,有什么作用。很简单,大家都知道#define实现宏定义,如下代码:#define Flag 1...
  • u011058765
  • u011058765
  • 2015年06月19日 12:06
  • 498

《Effective C++》:条款41-条款42

条款41了解隐式接口和编译期多态 条款42了解typename的双重意义条款
  • KangRoger
  • KangRoger
  • 2015年03月10日 22:13
  • 1242

《Effective C++》:条款44-条款45

条款44将与参数无关的代码抽离templates 条款45运用成员函数模板接受所有兼容类型...
  • KangRoger
  • KangRoger
  • 2015年03月12日 22:01
  • 1508

《Effective C++》资源管理:条款13-条款15

在系统中,资源是有限的,一旦用完必须归还给系统,否则可能会造成资源耗尽或其他问题。例如,动态分配的内存如果用完不释放会造成内存泄漏。 这里说的资源不仅仅是指内存,还包括其他,例如文件描述符、网络连接、...
  • KangRoger
  • KangRoger
  • 2015年01月14日 21:46
  • 1325

Effective Modern C++ 条款23 理解std::move和std::forward

Effective Modern C++ 条款23
  • big_yellow_duck
  • big_yellow_duck
  • 2016年08月30日 17:11
  • 1203

Effective C++ 条款15

在资源管理类中提供对原始资源的访问前面两节都在讨论如何管理资源,一般情况下,使用资源管理类来屏蔽原始资源,对抗内存泄露等问题,避免使用原始资源。这样我们就无法直接访问原本的原始资源。毕竟程序在有些时候...
  • u011058765
  • u011058765
  • 2015年06月24日 10:52
  • 669

《Effective C++》:条款38-条款39

条款38通过复合塑模树has-a 或根据某物实现出 条款39明智而审慎的使用private继承...
  • KangRoger
  • KangRoger
  • 2015年03月08日 21:32
  • 1155

Effective C++——条款10条,条款11和条款12(第2章)

条款10:    令operator=返回一个reference to *this Have assignment operators return a reference to *this ...
  • yiranant
  • yiranant
  • 2015年08月29日 23:35
  • 604

effective C++ 读书笔记 条款21

effective C++ 读书笔记 条款21
  • djb100316878
  • djb100316878
  • 2014年11月06日 16:22
  • 892
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Effective C++中的条款
举报原因:
原因补充:

(最多只允许输入30个字)