0%

『effective』C++

Effective C++ 的目录。

1. 让自己习惯 C++

01 视 C++ 为一个语言联邦

02 尽量以 const, enum, inline 代替 #define

03 尽可能使用 const

04 确定对象被使用前已先被初始化


2. 构造/析构/赋值运算

05 了解 C++ 默默编写并调用哪些函数

06 若不想使用编译器自动生成的函数,就该明确拒绝

07 为多态基类声明 virtual 析构函数

08 别让异常逃离析构函数

09 绝不在构造和析构过程中调用 virtual 函数

10 令 operator= 返回一个 reference to *this

11 在 operator= 中处理 自我赋值

12 赋值对象时勿忘其每一个成分


3. 资源管理

13 以对象管理资源

14 在资源管理类中小心 copying 行为

15 在资源管理类中提供对原始资源的访问

16 成对使用 new 和 delete 时要采取相同的形式

17 以独立语句将 newed 对象置入智能指针

4. 设计与声明

18 让接口容易被正确使用,不易被误用

19 设计 class 犹如设计 type

20 宁以 pass-by-reference-to-const 替换 pass-by-value

21 必须返回对象时,别妄想返回其 reference

22 将成员变量声明为 private

23 宁以 non-membernon-friennd 替换 member 函数

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

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

5. 实现

26 尽可能延后变量定义式的出现时间

27 尽量少做转型动作(Minimize casting)

28 避免返回 handles 指向对象内部成分

29 为 异常安全(exception-safe)努力是值得的

30 透彻了解 inlining 的里里外外

31 将文件间的编译依存关系降至最低

6. 继承与面向对象设计

32 确定你的 public 继承塑模出 Is-a 关系

33 避免遮掩继承而来的名称

34 区分接口继承和实现继承

35 考虑 virtual 函数以外的其他选择

36 绝不重新定义继承而来的 non-virtual 函数

37 绝不重新定义继承而来的缺省参数值

38 通过复合塑模出 has-ais-implemented-in-terms-of

39 明智而审慎地使用 private 继承

40 明智而审慎地使用 多重继承

7. 模板与泛型编程

41 了解隐式接口和编译器多态

42 了解 typename 的双重含义

43 学习处理模板化基类内的名称

44 将参数无关的代码抽离 templates

45 运用 成员函数模板 接受所有兼容类型

46 需要类型转换时请为模板定义非成员函数

47 请使用 traits classes 表现类型信息

48 认识 template 元编程

8. 定制 new 和 delete

49 了解 new-handler 的行为

50 了解 new 和 delete 的合理替换时机

51 编写 new 和 delete 时需固守常规

52 写了 placement new 也要写 placement delete

9. 杂项讨论

53 不要轻忽编译器的警告

54 让自己熟悉包括 TR1 在内的标准程序库

55 让自己熟悉 Boost