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,并且结果将存储在临时对象中。 接下来,计算表达式 临时 + Complex3 ,并将结果复制到 ComplexResult (假设赋值运算符未) 重载。
存储强制转换为用户定义的类型的结果。 在给定类型的对象显式转换为用户定义的类型时,将构造一个新对象作为临时对象。
临时对象具有根据其创建点和销毁点定义的生存期。 创建多个临时对象的表达式最终会按与这些对象的创建顺序相反的顺序来销毁它们。 下表中显示了析构发生的时点。
临时对象的析构点
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处
本文章博客地址:https://blog.youkuaiyun.com/it_cplusplus/article/details/118107832