接下来的是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)的更多相关文章

  1. Effective前端2:优化html标签

    div { float: left; } .keyboard > div + div { margin-left: 8px; } --> div{display:table-cell;ve ...

  2. Effective java笔记(二),所有对象的通用方法

    Object类的所有非final方法(equals.hashCode.toString.clone.finalize)都要遵守通用约定(general contract),否则其它依赖于这些约定的类( ...

  3. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  4. 《Effective Java》学习笔记——积累和激励

    从一个实际案例说起 国庆长假前一个礼拜,老大给我分配了这么一个bug,就是打印出来的报表数量为整数的,有的带小数位,有的不带,毫无规律. 根据短短的两个多月的工作经验以及猜测,最终把范围缩小到以下这段 ...

  5. Effective前端5:减少前端代码耦合

    什么是代码耦合?代码耦合的表现是改了一点毛发而牵动了全身,或者是想要改点东西,需要在一堆代码里面找半天.由于前端需要组织js/css/html,耦合的问题可能会更加明显,下面按照耦合的情况分别说明: ...

  6. Effective前端4:尽可能地使用伪元素

    伪元素是一个好东西,但是很多人都没怎么用,因为他们觉得伪元素太诡异了.其实使用伪元素有很多好处,最大的好处是它可以简化页面的html标签,同时用起来也很方便,善于使用伪元素可以让你的页面更加地简洁优雅 ...

  7. Effective前端3:用CSS画一个三角形

    p { text-indent: 2em } .triangle-container p { text-indent: 0 } img { margin: 15px 0 } 三角形的场景很常见,打开一 ...

  8. Effective前端1:能使用html/css解决的问题就不要使用JS

    div{display:table-cell;vertical-align:middle}#crayon-theme-info .content *{float:left}#crayon-theme- ...

  9. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  10. effective java 读后感

    think in java  , effective java  这两本书一直都在java的生态圈中经久不衰.本来想着先翻过 think in java 这本大山,但是读到一半就放弃了.过长的篇幅,让 ...

随机推荐

  1. Android常见面试题目

    1.Activity 的生命周期 转自:http://kb.cnblogs.com/page/70125/ 多谢楼主分享 首先看一下Android api中所提供的Activity生命周期图(不明白的 ...

  2. 【JQGRID DOCUMENTATION】.学习笔记.5.Form Editing

    JqGrid支持为view ,add, edit,delete, search创建一个on the fly的form.这使得Modal Boxes和行内编辑能够在程序用结合.毕竟,行内编辑只能用在已经 ...

  3. 模拟namenode崩溃,使用secondarynamenode恢复

    方法一.使用namespaceID 1.在namenode节点上,将dfs.name.dir指定的目录中(这里是name目录)的内容情况,以此来模拟故障发生. [hadoop@node1 name]$ ...

  4. Android系统版本与API Level对照表

    Platform Version API Level VERSION_CODE Notes Android 4.2 17 JELLY_BEAN_MR1   Android 4.1, 4.1.1 16 ...

  5. MD5加密,Base64加密/解密,AES加密/解密

    1.从github上下载GTMBase64-master和AESCrypt-ObjC-master导入工程,如下图所示. 2.使用前的配置及注意事项: (1) 在build phases中的GTMBa ...

  6. [转]android使用shape stroke描边只保留底部

    在项目中遇到这种情况:由于一些原因,自己需要用LinearLayout的垂直布局做出ListView的那种效果,但是ListView是自带了分割线的,而且顶部底部都是没有分割线的,每个item中间都是 ...

  7. 如果在遨游浏览器里设置Bing(必应)搜索为默认搜索

    今天刚装了遨游浏览器,发现搜索引擎列表里没有Bing(必应)搜索的选项,就自己DIY了下. 步骤: 1. 在遨游搜索引擎列表管理里,添加一个新的搜索引擎项: Name:填写上”Bing(必应)“ (这 ...

  8. H - Solve this interesting problem 分类: 比赛 2015-07-29 21:06 15人阅读 评论(0) 收藏

    Have you learned something about segment tree? If not, don't worry, I will explain it for you.  Segm ...

  9. 山东理工大学第七届ACM校赛-经济节约 分类: 比赛 2015-06-26 10:34 19人阅读 评论(0) 收藏

    经济节约 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描述 由于经济紧张,某国国王决定减少一部分多余的士兵,这些士兵在边界都有各自的 ...

  10. Linux下缓冲区溢出攻击的原理及对策(转载)

    前言 从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用.当函数调用发生时,新的堆栈帧被压入堆栈:当函数返回时,相应的堆栈帧从堆栈中弹出.尽管堆栈帧结构的引入为在高级语言中实现 ...