文章目录 一 让自己习惯C++1:视C++为一个语言联邦2:尽量用const,enum,inline替换#define3:尽可能的使用const4:确定对象使用前已先被初始化 二 构造/析构/赋值运算5:了解C++默默编写并调用哪些函数6:若不想使用编译器自动生成的函数,就该明确的拒绝7:为多态基类声明virtual析构函数8:别让异常逃离析构函数9:绝对不要在构造和析构过程中调用virtual函数10:令operator = 返回一个reference to *this11:在operator =中处理’自我赋值’12:复制对象时勿忘其每一个成分 三 资源管理13:以对象管理资源14:在资源管理类中小心copying行为15:在资源管理类中提供对原始资源的访问16:成对使用new和delete时要采取相同的形式17:以独立语句将newed对象置入智能指针 四 设计与声明18:让接口容易被正确的使用,不易被误用19:设计class犹如设计type20:宁以pass-by-reference-to-const替换pass-to-value21:必须返回对象时,别妄想返回其reference22:将成员变量声明为private23:宁以non-memeber,non-friend 替换 member 函数24:若所有参数都需要类型转换,请为此采用non-member函数25:考虑写出一个不抛出异常的swap函数 五 实现26:尽可能延后变量定义式的出现时间27:尽量少做转型动作28:避免返回handles指向对象内部成分29:为“异常安全”而努力是值得的30:透彻了解inlining的里里外外31:将文件的编译存在关系降至最低 六 继承与面向对象设计32:确定你的public继承塑模出Is-a关系33:避免遮掩继承而来的名称34:区分接口继承和实现继承35:考虑virtual函数以为的其他选择36:绝不重新定义继承而来的non-virtual函数37:绝不重新定义继承而来的缺省参数值38:通过复合塑模出has-a或“根据某物实现出“39:明智而审慎地使用private继承40:明智而审慎地使用多重继承 七 模板与泛型编程41:了解隐式接口和编译期多态42:了解typename的双重意义43:学习处理模块化基类内的名称44:将于参数无关的代码抽离templates45:运用成员函数模板接受所有兼容类型46:需要类型转换时请为模板定义非成员函数47:请使用traits classes表现类型信息48:认识template元编程 八 定制 new 和 delete49:了解new-handler的行为50:了解new 和 delete的合理替换时机51:编写new 和delete时需固守常规52:写了placement new 也要写placement delete 九 杂项讨论53:不要轻视编译器的警告54:让自己熟悉TR1在内的标准程序库55:让自己熟悉Boost 参考链接: 一 让自己习惯C++ 1:视C++为一个语言联邦 2:尽量用const,enum,inline替换#define 3:尽可能的使用const 4:确定对象使用前已先被初始化 二 构造/析构/赋值运算 5:了解C++默默编写并调用哪些函数 6:若不想使用编译器自动生成的函数,就该明确的拒绝 7:为多态基类声明virtual析构函数 8:别让异常逃离析构函数 9:绝对不要在构造和析构过程中调用virtual函数 10:令operator = 返回一个reference to *this 11:在operator =中处理’自我赋值’ 12:复制对象时勿忘其每一个成分 三 资源管理 13:以对象管理资源 14:在资源管理类中小心copying行为 15:在资源管理类中提供对原始资源的访问 16:成对使用new和delete时要采取相同的形式 17:以独立语句将newed对象置入智能指针 四 设计与声明 18:让接口容易被正确的使用,不易被误用 19:设计class犹如设计type 20:宁以pass-by-reference-to-const替换pass-to-value 21:必须返回对象时,别妄想返回其reference 22:将成员变量声明为private 23:宁以non-memeber,non-friend 替换 member 函数 24:若所有参数都需要类型转换,请为此采用non-member函数 25:考虑写出一个不抛出异常的swap函数 五 实现 26:尽可能延后变量定义式的出现时间 27:尽量少做转型动作 28:避免返回handles指向对象内部成分 29:为“异常安全”而努力是值得的 30:透彻了解inlining的里里外外 31:将文件的编译存在关系降至最低 六 继承与面向对象设计 32:确定你的public继承塑模出Is-a关系 33:避免遮掩继承而来的名称 34:区分接口继承和实现继承 35:考虑virtual函数以为的其他选择 36:绝不重新定义继承而来的non-virtual函数 37:绝不重新定义继承而来的缺省参数值 38:通过复合塑模出has-a或“根据某物实现出“ 39:明智而审慎地使用private继承 40:明智而审慎地使用多重继承 七 模板与泛型编程 41:了解隐式接口和编译期多态 42:了解typename的双重意义 43:学习处理模块化基类内的名称 44:将于参数无关的代码抽离templates 45:运用成员函数模板接受所有兼容类型 46:需要类型转换时请为模板定义非成员函数 47:请使用traits classes表现类型信息 48:认识template元编程 八 定制 new 和 delete 49:了解new-handler的行为 50:了解new 和 delete的合理替换时机 51:编写new 和delete时需固守常规 52:写了placement new 也要写placement delete 九 杂项讨论 53:不要轻视编译器的警告 54:让自己熟悉TR1在内的标准程序库 55:让自己熟悉Boost 参考链接: 《Effective C++》读书笔记Effective Cpp 第三版学习笔记