More Effective C++ (2)
接下来的是more effective c++ 11至20条款:
11.禁止异常信息(exceptions)传递到析构函数外。
析构函数的调用情况可能有两种:(1)对象正常销毁 (2)异常传播过程中的栈展开机制-销毁。
如果在析构函数内抛出异常,它不会被析构函数捕获,它会传播到析构函数的调用端,如果调用端是因为其他异常而被
调用的,那么程序就会死掉。还有可能就是导致后面的语句无法执行,所以不能让异常传播到析构函数之外。
12.理解“抛出一个异常”与“传递一个参数”或“调用一个虚函数”间的差异。
(1)抛出的异常总会被复制(值传递或引用传递),指针不会被复制,trows ;抛出当前异常,throws type; 抛出异常的静态类型。
(2)被抛出的异常不会进行类型转换,但是可以捕获继承父类的子类型异常。
(3)处理异常的顺序为先捕获先处理,所以要把子类异常放在父类异常前面。
13.通过引用(reference)捕获异常。
通过引用捕获异常,可以解决用指针抛出异常时,如果指针为局部对象(抛出的是被销毁的垃圾),
或者抛出指针new 的堆中的对象该不该在之后删除的烦恼。
也可解决以值传递造成的二次复制的效率问题和虚函数调用的多态问题(异常复制是对静态类型的复制)。
14.审慎使用异常规格(exception specifications)。
在给出了异常规格的函数中,如果函数内不经意违反了异常规格中的异常列表,会导致程序的终止。
也可能会导致较高层次的调用者已经准备处理该异常而无法处理。也可以用“以不同类型的异常取代非预期的异常”解决这个问题。
15.了解异常处理的系统开销。
异常的使用成本是挺高的,请将对try语句块和异常规格的使用限制于非用不可的地点,并且在真正异常的情况下才抛出异常。
16.谨记80-20法则
一个程序80%的资源用于20%的代码的身上。80%的内存被大约20%的代码使用,80%的执行时间花在大约20%的代码身上。
当你需要找出问题的瓶颈所在,最好的是找到那关键的20%的代码,可以借助某个程序分析器来分析,知道语句被执行或函数
调用的频繁度也可以给你一些启示。
17.考虑使用lazy evaluation。
这个法则简而言之就是将非必要的大量的复杂的计算在等到真的要使用的时候才去计算获得,可以提高效率。
不过,真的需要无法避免的大量运算的话,那也是要付出相应的代价的呀。
18.分期摊还预期的计算成本。
这个条款与上一个相对应的,这个条款相当于先预分配需要的内存,或预记录频繁使用的数据,用空间来换取时间。
19.了解临时对象的来源。
临时对象并不是局部对象,它不会在你的源码里出现。
临时对象产生有两种可能:(1)当隐式类型转换。 (2)函数返回对象时候。
只有当以值传递或常量引用传递参数时才会发生隐式类型转换,非常量引用对象参数传递不会发生隐式转换。
要注意避免隐式类型转换,做好返回值的优化。
20.协助完成“返回值优化RVO”。
可以通过内联函数进行返回值的优化,这样可以消除返回的局部对象和临时对象。
未完待续~
More Effective C++ (2)的更多相关文章
- Effective前端2:优化html标签
div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...
- Effective java笔记(二),所有对象的通用方法
Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《Effective Java》学习笔记——积累和激励
从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...
- Effective前端5:减少前端代码耦合
什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...
- Effective前端4:尽可能地使用伪元素
伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...
- Effective前端3:用CSS画一个三角形
p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...
- Effective前端1:能使用html/css解决的问题就不要使用JS
div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- effective java 读后感
think in java , effective java 这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...
随机推荐
- grep DEMO
测试数据: [xiluhua@vm-xiluhua][~]$ cat msn.txt aaa bbb bbb ccc ccc ddd bbb eee aaa ccc bbb sss [xiluhua@ ...
- python day6 面向对象
把一个类变成具体的实例化的过程叫做类 实例化:把一个类变成一个具体对象的过程 __init__ 构造函数,在实例化时初始化数据 __init__方法的第一个参数永远是self,表示创建的实例本身,因 ...
- win7中sql2005 连接其它sql2005服务器,连不上
1.在管理工具-->高级安全 Windows 防火墙下配置下入站规则,将sql的端口加入里面,关闭防火墙并没有把这个给关闭掉 2 .Sql Server Browser 启用3.客户端协议 tc ...
- CSUFT 1003 All Your Base
1003: All Your Base Time Limit: 1 Sec Memory Limit: 128 MB Submit: 4 Solved: 2 Description ...
- kindeditor编辑器
一 简单使用方法 1. 把所有文件上传到程序所在目录下,例如:http://你的域名/editor/. 2. 在此目录下创建attached文件夹,并把权限改成777. 3. 要添加编辑器的地方加入以 ...
- nn package
1.nn模块是神经网络模块 2.父类module,子类Sequential, Parallel和Concat 3.Linear:做线性变换 4.criterion 这个模块包含了各式各样的训练时的损失 ...
- Android WebView使用基础
WebView基本使用 WebView是View的一个子类,可以让你在activity中显示网页. 可以在布局文件中写入WebView:比如下面这个写了一个填满整个屏幕的WebView: <?x ...
- Repeater删改
一.Repeater删改 中心思路:点击"删除"链接,跳转到"删除"网页,在"删除"网页里面执行删除方法,然后再返回主界面,根据删除界面返回 ...
- gd-jpeg: JPEG library reports unrecoverable error 解决办法
Warning: imagecreatefromjpeg() [function.imagecreatefromjpeg]: gd-jpeg: JPEG library reports unrecov ...
- office2010官方下载 免费完整版.zip
office2010官方下载 免费完整版.zip http://pan.baidu.com/share/link?shareid=1103795384&uk=67799523 ________ ...