《Effective C++》
文章平均质量分 74
记录看书过程中,对55个条款的一些理解和标注
Jiu_R
coder
展开
-
条款18~25:设计与声明
条款18:让接口容易被正确使用,不容易被误用“促进正确使用”的方法:接口的一致性;自定义的class类型保持与内置类型的行为一致;“阻止误用”的方法:建立新类型;限制类型上的操作;束缚对象值;消除客户的资源管理责任;*std::shared_ptr提供的某个构造函数接受两个参数:所管理的指针和引用计数为0时被调用的“删除器”,由于可以指定删除器,因此可以预防DLL问题(当第二参数缺省时,默认调用的是这个shared_ptr被创建时所在的那个DLL的delete)条款19:设计class犹如设计t原创 2021-01-12 19:46:03 · 320 阅读 · 0 评论 -
条款53~55:杂项讨论
条款53:不要轻忽编译器的警告条款54:让自己熟悉包括TRI在内的标准程序库条款55:让自己熟悉Boost原创 2021-01-14 11:12:01 · 70 阅读 · 0 评论 -
条款49~52:定制new和delete
条款49:了解new-handle的行为条款50:了解new和delete的合理替换时机条款51:编写new和delete时需固守常规条款52:写了placement new也要写placement delete原创 2021-01-14 11:11:52 · 57 阅读 · 0 评论 -
条款41~48:模板与泛型编程
条款41:了解隐式接口和编译期多态条款42:了解typename的双重意义条款43:学习处理模板化基类的名称条款44:将与参数无关的代码抽离templates条款45:运用成员函数模板接受所有兼容类型条款46:需要类型转换时请为模板定义非成员函数条款47:请使用traits classes表现类型信息条款48:认识template元编程...原创 2021-01-13 22:37:11 · 75 阅读 · 0 评论 -
条款32~40:继承与面向对象设计
条款32:确定你的Public继承塑模出is-a关系条款33:避免遮掩继承而来的名称条款34:区分接口继承和实现继承条款35:考虑virtual函数以外的其他选择条款36:绝不重新定义继承而来的non-virtual函数条款37:绝不重新定义继承而来的缺省参数值条款38:通过复合塑模出has-a或’‘根据某物实现出’’条款39:明智而审慎地使用paivate继承条款40:明智而审慎地使用多重继承...原创 2021-01-13 21:27:30 · 83 阅读 · 0 评论 -
条款26~31:实现
条款26:尽可能延后变量定义式的出现时间条款27:尽量少做转型动作旧式转换:int(double) : 函数风格(int)double :C风格C++的四种新式转型:const_cast: 去掉对象的const性质(四种转换中唯一可以non-const转换为const的);static_cast: 强迫进行各种隐式类型转换dynamic_cast: 用于class的继承体系中的”安全向下转型“(四种转换中唯一不能用旧式转换完成的动作,也是唯一可能导致巨大成本的转换动作)reinter原创 2021-01-12 19:46:11 · 92 阅读 · 0 评论 -
条款13~17:资源管理
条款13:以对象管理资源资源:内存;文件描述器;互斥锁;图形界面中的字型和笔刷;数据库连接;网络sockets在不再使用资源时,要返回给系统;运用RALL对象管理资源(resource acquisition is initialization 的缩写,意为“资源获取即初始化”):获得资源后立刻放进管理对象内(将获得的资源用于初始化(或赋值)某个RALL对象){ std::shared_ptr<int> p(new int(10)); //new一个对象,立刻用于初始化sh原创 2021-01-12 19:45:55 · 126 阅读 · 0 评论 -
条款5~12:构造/析构/赋值运算符
条款5:了解C++默默编写并调用哪些函数条款6:若不想使用编译器自动生成的函数,就该明确拒绝条款7:为多态基类声明virtual析构函数条款8:别让异常逃离析构函数析构函数绝不能吐出异常,以免造成连锁反应,可选的处理方式:1.选择吞下不传播 2. 调用absort结束程序 3. 重新设计接口,给客户自己选择的机会结束程序可以保证析构函数内发生的错误不会从析构函数传播出去,但很多时候我们认为这个错误可以忽略时,草率结束程序也不好;如果客户需要对某个操作函数在巡行期间抛出的细长作出反应,那么原创 2021-01-12 19:45:47 · 109 阅读 · 0 评论 -
条款1~4:让自己习惯C++
条款1:视C++为一个语言联邦C++由四个此语言组成,使用哪一部分就按哪一部分的规矩来C++ = C + object-oriented C++ + Template C++ + STL条款2:尽量以const,enum,inline替换#define尽量用编译器,而不要用预处理器1. #define定义的名称无法追踪,不易调试若采用#define宏定义变量:#define ASPECT_RATIO 1.653; //宏定义的方式原创 2021-01-12 19:45:38 · 109 阅读 · 0 评论