C++中临时对象的创建

在某些情况下,编译器需要创建临时对象。 可能会出于下列原因创建这些临时对象:

• 使用一个不同于所初始化的引用的基础类型的类型的初始值设定项初始化 const 引用。

• 存储返回用户定义类型的函数的返回值。 仅当您的程序未将返回值复制到对象时,才会创建这些临时内存。 例如:

复制

UDT Func1(); // Declare a function that returns a user-defined
// type.

Func1(); // Call Func1, but discard return value.
// A temporary object is created to store the return
// value.

由于未将返回值复制到另一个对象,因此创建了临时对象。 创建临时内存更常见的情况是在计算必须调用重载运算符函数的表达式时。 这些重载运算符函数将返回一般不会复制到其他对象的用户定义的类型。

请考虑表达式 ComplexResult = Complex1 + Complex2 + Complex3。 将计算表达式 Complex1 + Complex2,并且结果将存储在临时对象中。 接下来,将计算表达式 temporary + Complex3,并将结果复制到 ComplexResult(假设未重载赋值运算符)。

• 存储强制转换为用户定义的类型的结果。 在给定类型的对象显式转换为用户定义的类型时,将构造一个新对象作为临时对象。

临时对象具有根据其创建点和销毁点定义的生存期。 创建多个临时对象的表达式最终会按与这些对象的创建顺序相反的顺序来销毁它们。 下表中显示了析构发生的时点。

临时对象的析构点

创建临时项的原因

析构点

表达式计算的结果

将在表达式语句末尾(即,分号处)或 for、if、while、do 和 switch 语句的控制表达式的末尾销毁作为表达式计算结果创建的所有临时项。

初始化 const 引用

如果初始值设定项不是与所初始化引用相同类型的左值,则将用初始化表达式创建和初始化基础对象类型的临时项。 此临时对象将在其绑定到的引用对象销毁后立即销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

从一而终

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值