在C ++中分配的临时对象在哪里?

时间:2014-06-26 10:48:00

标签: c++ stack heap allocation move-semantics

SomeClass a, b, c;
SomeClass foo();
SomeClass a = (b + c); //Where is the object (b + c) allocated?
SomeClass a = foo(); //Where is the returned value of foo() allocated?

我的猜测是它们是在堆上分配的,因为我读到表达式(;)末尾的临时对象被销毁

这对我有意义,因为移动构造函数可以通过窃取堆上临时对象的指针来实现。

2 个答案:

答案 0 :(得分:4)

如果完全创建(考虑优化),则它们位于自动存储中。即堆栈。

答案 1 :(得分:0)

通常,如果临时对象有目的地,则可以在那里创建。更强大,即使临时版具有不同的类型,也可能是真的:Foo f = transmogrify(Bar()); - Bar()临时版可能会窃取f所需的存储空间。

当析构函数运行时有一个理论模型,但通常这不是可观察的行为,因此是可优化的。即很多dtors可以早点跑。