Effective C++ —— 实现(五)

条款26 : 尽可能延后变量定义式的出现时间

  1. 你不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。这样,不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造行为。

  2. 考虑下面两个循环:

// 方法A:定义于循环外
Widget w;
for ((int i = 0; i < n; ++i)
{
    w = 取决于i的某个值;
    .....
}

// 方法B:定义于循环内
for ((int i = 0; i < n; ++i)
{
    Widget w(取决于i的某个值);
    .....
}

在Widget函数内部,以上两种写法的成本如下:

1. 做法A:1个构造函数 + 1个析构函数 + n个赋值操作;

2. 做法B:n个构造函数 + n个析构函数;

  如果classes的一个赋值成本低于一组构造+析构成本,做法A大体而言比较高效。尤其当n值很大的时候。否则做法B或许较好。此外做法A造成名称w的作用域(覆盖整个循环)比做法B更大,有时那对程序的可理解性和易维护性造成冲突。因此除非(1)你知道赋值成本比“构造+析构”成本低, (2)你正在处理代码中效率高度敏感的部分,否则,你应该使用做法B.(将变量定义于循环内)

故而:
  尽可能延后变量定义式的出现。这样做可增加程序的清晰度并改善程序效率。

条款27 : 尽少做转型动作

  1. 你不只

欲开发一个“容易被正确使用,不容易被误用”的

时间: 2024-11-02 23:36:41

Effective C++ —— 实现(五)的相关文章

迅速读懂:Effective STL (五)

这是<Effective STL>笔记最后一期,不能涵盖全部内容,书后仍然有些附加内容,不在附加,有兴趣可以找原书来读读,一则是区域设置后的忽略大小写比较,另一则是MSVC4-5编译器下STL注意事项 条款41:了解使用ptr_fun.mem_fun和mem_fun_ref的原因 函数和函数对象总使用用于非成员函数的语法形式调用.mem_fun带有一个到成员函数的指针,pmf,并返回一个mem_fun_t类型的对象.这是一个仿函数类,容纳成员函数指针并提供一个operator(),它调用指向在

计算机必读书籍

漫长的三年过去了,我们摸爬滚打,没有指路的明灯.我也在摸索中走了不少的弯路,向我的软件班的同学引荐别人推荐几本好书(我也是在查漏补缺),希望有志者能少走些弯路. 一. 科学哲学和管理哲学[1] “程序开发心理学”(The Psychology of Computer Programming : Silver Anniversary Edition)[2] “系统化思维导论”(An Introduction to Systems Thinking, Silver Anniversary Editi

软件人员推荐书目(都是国外经典书籍!!!)

软件人员推荐书目(都是国外经典书籍!!!) 软件人员推荐书目(一) 大师篇 一. 科学哲学和管理哲学 [1] "程序开发心理学"(The Psychology of Computer Programming : Silver Anniversary Edition) [2] "系统化思维导论"(An Introduction to Systems Thinking, Silver Anniversary Edition) [3] "系统设计的一般原理&qu

《Effective C++》重点摘要(五)

<Effective C++>第五章:实现 尽可能延后变量定义式的出现时间.只有变量在恰好要使用之前定义,程序的可读性往往会得到提高,因为这样不容易忘记变量说代表的意思.另一方面,这样做可以提高程序性能,如果不需要一个变量时却要为它分配.释放空间,调用构造.析构函数,获取.释放资源--这,真是太浪费了.补充一点,声明式并不会做这些事情,所以可以考虑用声明式替换定义式以尽量延后变量的定义. 尽量少做转型动作.转型意味着出错的可能性大大提升,转型意味着更多的操作.如果不得不转型,考虑使用C++ s

effective OC2.0 52阅读笔记(五 内存管理)

第五章:内存管理 29 理解引用计数 30 以ARC简化引用计数 总结:ARC通过命名约定将内存管理规则标准化.其他编程语言很少像OC这样强调命名.ARC通过设置全局数据结构(此数据结构的具体内容因处理器而异)中的一个标志位,来代替直接调用autorelease和retain.这是ARC所带来的好处.待编译器与运行期组件日臻成熟,还会出现其他的优化技术.CoreFoundation对象不归ARC管理,开发者必须适时调用CFRetain/CFRelease. 31 在dealloc方法中只释放引用

只需五分钟 读完 Effective Java

Effective Java 创建和销毁对象---考虑用静态工厂方法代替构造器 构造器是创建一个对象实例最基本也最通用的方法,大部分开发者在使用某个class的时候,首先需要考虑的就是如何构造和初始化一个对象示例,而构造的方式首先考虑到的就是通过构造函数来完成,因此在看javadoc中的文档时首先关注的函数也是构造器.所以对于类而言,我们为了获得一个类的实例对象,通常情况下会提供一个公有的(public) 的构造器.当然除了这种方法以外,我们还可以通过给类提供一个public的静态工厂方法(st

Effective Java2读书笔记-类和接口(五)

第21条:用函数对象表示策略 这一条其实也没说啥,就是策略模式.碰到这种场景时,定义一个策略接口,然后不同策略子类实现它,主类包含这个接口的引用就可以了. 第22条:优先考虑静态成员类 嵌套类是指被定义在另一个类的内部的类.嵌套类存在的目的应该只是为它的外围类提供服务.嵌套类包括四种:静态成员类.非静态成员类.匿名类和局部类.除了第一种之外,其他三种都被称为内部类. 听起来很绕,其实区分还是很简单的. 首先,如果没有放在方法内部,那就是成员类(根据具体情况决定要不要做成静态的).放在方法内部,那

《Effective C++》学习笔记(五)

原创文章,转载请注明出处:http://blog.csdn.net/sfh366958228/article/details/38865869 前言 昨天已作出预告,今天学习的是整个第三章,资源管理,通读了一遍之后,感觉似懂非懂,于是又再读了一遍. 所谓资源,一旦用了它,将来必须要还给系统.C++中最常用得动态分配内存既是如此,但内存只是你管理的众多资源之一,还有数据库连接.网络socket.图形界面中的字体和笔刷等. 尝试在任何情况下确保都还给系统是很难的,但如果考虑上异常.函数内多重回转路径

Linux运维 第二阶段 (五)权限管理

Linux运维第二阶段(五)权限管理 一.权限管理(解决用户和身份不足的问题) >#dumpe2fs  -h /dev/sda2             (查询指定分区详细文件系统信息的命令,-h仅显示超级块中的详细信息) #mount  -o remount,acl  /             (重新挂载根分区,加入acl权限) >acl基本命令: #getfacl  文件名                      (查询文件的acl权限) #setfacl  -m  u:用户名:权限