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?
我的猜测是它们是在堆上分配的,因为我读到表达式(;)末尾的临时对象被销毁。
这对我有意义,因为移动构造函数可以通过窃取堆上临时对象的指针来实现。
答案 0 :(得分:4)
如果完全创建(考虑优化),则它们位于自动存储中。即堆栈。
答案 1 :(得分:0)
通常,如果临时对象有目的地,则可以在那里创建。更强大,即使临时版具有不同的类型,也可能是真的:Foo f = transmogrify(Bar());
- Bar()
临时版可能会窃取f
所需的存储空间。
当析构函数运行时有一个理论模型,但通常这不是可观察的行为,因此是可优化的。即很多dtors可以早点跑。