现在的位置: 首页 > 综合 > 正文

《深度探索C++对象模型》读书笔记5:临时性对象

2013年04月23日 ⁄ 综合 ⁄ 共 573字 ⁄ 字号 评论关闭

一、什么时候会导致编译器产生临时性对象?

在某些环境下, 由processor产生临时性对象是有必要的,亦或是比较方便的,这样的临时性对象由编译器来定义。

可能产生临时性对象的情况有三种:

1、形如下式的变量初始化,会产生一个临时性对象,放置a+b的结果,然后再使用T的copy constructor把该临时性对象作为C的初始值。

但若直接以拷贝构造的方式,将a+b的值放到c中,就不需要临时性对象了。这要视operator+()的定义而定,也与named return value是否实施有关。

T a , b;

T c = a + b;

2、与上式意义相当的赋值语句,此时,这里不能够忽略临时性对象。

T c;

c = a + b;

3、没有出现目标对象的语句,这时候有必要产生一个临时对象,以放置运算后的结果。这种情况在子表达式中十分普遍。

a+b;

二、临时性对象的生命期

凡含有表达式执行结果的临时性对象,应该存留到object的初始化操作完成为止。

临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个步骤。该完整表达式造成临时性对象的产生。

完整表达式是指被涵括的表达式中最外围的那个。

如果一个临时性对象被绑定于一个reference,对象将残留,直到被初始化之reference的生命结束,或者直到临时性对象的生命范畴结束(视哪一种情况先到达而定)。

【上篇】
【下篇】

抱歉!评论已关闭.