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

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

在某些环境下, 由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的生命结束,或者直到临时性对象的生命范畴结束(视哪一种情况先到达而定)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值