![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
More Effective C++
Guosheng-zZ
吃饭摸鱼借鉴代码,
听歌睡觉网瘾少年。
展开
-
MoreEffectiveC++笔记 8杂项
MoreEffectiveC++笔记 8杂项未来时态开发程序将非尾端类设计为抽象类3如何在同一程序中混合使用C++和C名变换静态初始化动态分配内存数据结构的兼容性让自己习惯使用标准C++语言未来时态开发程序用C++语言来表达要求的约束条件,例如不能继承、必须在堆/栈上构造。判断函数是否应当是虚函数。拷贝赋值是否设置为私有。重载操作符要与内建数据一致。只要是能被人做的,就有人这么做(莫菲法则)。他们会抛异常;会用自己给自己赋值;在没有赋初值前就使用对象;给对象赋了值而没有使用;会赋过大的值、过小原创 2020-12-08 13:02:25 · 193 阅读 · 0 评论 -
MoreEffectiveC++笔记 7技巧
MoreEffectiveC++笔记 7技巧1构造函数和非成员函数虚拟化2限制某个类能产生的对象数目3要求或禁止在堆上生成对象4灵巧指针(智能指针)1构造函数和非成员函数虚拟化虚拟构造函数不是指把构造函数用virtual修饰。对象没有构造完成,不会产生多态的效果。这里是说构造函数调用一个工厂函数,产生的对象会作为这个类的成员,工厂函数会根据输入参数的不同动态生成不同的子类(因为能生成不同类型子类对象所以书里面叫他虚拟构造函数)。类似的可以定义虚函数clone作为虚拟拷贝构造函数完成多态复制。虚拟化非成原创 2020-12-07 15:53:14 · 210 阅读 · 0 评论 -
MoreEffectiveC++笔记 6效率
MoreEffectiveC++笔记 4效率1 牢记80-20准则2 lazy evaluation3分期摊还期望计算4理解临时对象的来源5协助完成返回值优化通过重载函数避免隐式类型转换1 牢记80-20准则胡乱提高一部分程序效率难有很大帮助;使用profiler程序识别其中20%的部分;用尽可能多的数据进行profiler测试。2 lazy evaluation延迟计算工作到系统需要这些计算的结果,如果不需要那么将不进行计算。引用计数例如一个变量s1赋值给s2,在s1s2未发生变化之前,我们可原创 2020-12-05 12:09:31 · 181 阅读 · 0 评论 -
MoreEffectiveC++笔记 5异常
MoreEffectiveC++笔记 3异常1使用析构函数防止资源泄露2构造函数中防止资源泄露3禁止异常传递到析构函数外面4抛出异常、传递参数、调用虚函数三者的差异5通过引用捕获异常6审慎使用异常规格7了解异常处理的系统开销普通的代码在异常出现的时候,出现一般考虑不到的致命错误。1使用析构函数防止资源泄露当我们使用指针时要时刻记得使用delete释放资源,但是当异常发生,程序末尾的delete语句可能并未被执行。所以必须使用try语句来对可能异常的语句进行捕获。while(dataSource){原创 2020-12-04 13:05:53 · 167 阅读 · 0 评论 -
MoreEffectiveC++笔记 4操作符
MoreEffectiveC++笔记 2操作符1谨慎定义类型转换函数2自增自减操作符的前后缀形式的区别3不要重载&& || 或 ,4理解不同含义的new和delete1谨慎定义类型转换函数类型转换函数无非包括两种,一个是至多有一个参数没有缺省的构造函数;另一种是类型转换操作符的重载。class Name{ public: Name(string name):_name(name){//一个参数 这时string类型可以隐转为Name } string _name;};cla原创 2020-12-01 16:18:12 · 129 阅读 · 0 评论 -
MoreEffectiveC++笔记 3基础议题
MoreEffectiveC++笔记 1基础议题1指针和引用的区别2尽量使用C++风格转换3不用对数组使用多态4避免无用的缺省构造函数1指针和引用的区别指针可以指向空值,引用必须绑定到另一个变量。int main(){ int *p = NULL; int &ref = *p;//尝试设置一个绑定到空的引用 cout<<ref;//g++下编译通过 运行时提示段错误 return 0;}引用必须被初始化,但是指针未初始化是合法的。int main(){ i原创 2020-11-30 18:11:06 · 245 阅读 · 0 评论