- 如下是本人阅读
Effective C++
时所做的笔记
chapter1 |
让自己习惯C++ |
---|---|
条款01 | 视C++为一个语言联邦 |
条款02 | 尽量使用 const enum 和inline 替换#define |
条款03 | 尽可能使用 const 关键字 |
条款04 | 确定对象使用前已经初始化 |
chapter2 |
构造/析构/赋值运算符 |
---|---|
条款05 | 了解C++ 默认编写并且调用了那些函数 |
条款06 | 如果不想使用编译器自动生成的函数,就应该明确拒绝 |
条款07 | 为多态基类声明virtual 析构函数 |
条款08 | 请别让异常逃离析构函数 |
条款09 | 绝不要在构造和析构的过程中调用virtual 函数 |
条款10 | 令operator 返回一个reference to *this |
条款11 | 在operator= 中处理自我赋值操作 |
条款12 | 复制对象的时候不要忘记它的每一个成分 |
chapter3 |
资源管理 |
---|---|
条款13 | 以对象管理资源 |
条款14 | 在资源管理类中小心copying 行为 |
条款15 | 在资源管理类中提供对于原始资源的访问 |
条款16 | 成对使用new 和delete 时采取相同的形式 |
条款17 | 以独立语句将newed 对象置入到智能指针中 |
chapter4 |
设计与声明 |
---|---|
条款18 | 让接口被正确使用,不易被误用 |
条款19 | 设计class 犹如设置type |
条款20 | 宁以pass-by-reference-to-const 替代pass-by-value |
条款21 | 必须返回对象的时候,别妄想返回其reference |
条款22 | 将成员声明为private |
条款23 | 宁以non-member ,non-friend 替换member 函数 |
条款24 | 若所有的参数都需要类型转换,请为此采用non-member 函数 |
条款25 | 考虑写出一个不抛出异常的swap 函数 |
chapter5 |
实现 |
---|---|
条款26 | 尽可能延后变量定义式出现事件 |
条款27 | 尽量少做转型动作 |
条款28 | 避免返回handles 指向对象的内部成分 |
条款29 | 为"异常安全"而努力是值得的 |
条款30 | 透彻了解inlining 的里里外外 |
条款31 | 将文件之间的编译依赖关系下降到最低 |
chapter6 |
继承与面向对象设计 |
---|---|
条款32 | 确定你的public 继承塑模出is-a 关系 |
条款33 | 避免遮掩继承而来的名称 |
条款34 | 区分接口继承与实现继承 |
条款35 | 考虑virtual 函数之外的选择 |
条款36 | 绝不重新定义继承而来的non-virtual 函数 |
条款37 | 绝不重新定义继承而来的缺省参数 |
条款38 | 通过复合塑模出has-a 或者"根据某物实现出" |
条款39 | 明智而审慎地使用private 继承 |
条款40 | 明智而审慎地使用多重继承 |
chapter7 |
模板与泛型编程 |
---|---|
条款41 | 了解隐式接口和编译时期多态 |
条款42 | 了解typename 的双重意义 |
条款43 | 学习处理模板化基类内的名称 |
条款44 | 将与参数无关的代码抽离templates |
条款45 | 运用成员函数模板接受所有兼容类型 |
条款46 | 需要类型转换的时候请为模板定义非成员函数 |
条款47 | 请使用traits classes 表现类型信息 |
条款48 | 认识template 元编程 |
chapter8 |
定制new 和delete |
---|---|
条款49 | 了解new-handler 的行为 |
条款50 | 了解new 和delete 的合理替换实际 |
条款51 | 编写new 和delete 时需要固守常规 |
条款52 | 写placement new 也要写placement delete |
chapter9 |
杂项讨论 |
---|---|
条款53 | 不要忽略编译器的警告 |
条款54 | 让自己熟悉包括TR1 在内的标准程序库 |
条款55 | 让自己熟悉Boost |