【问题标题】:Where are temporary objects allocated in C++?在 C++ 中分配的临时对象在哪里?
【发布时间】:2014-08-17 04:26:45
【问题描述】:
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?

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

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

【问题讨论】:

  • 它们被销毁的事实并没有说明它们是分配在堆上还是堆栈上。在堆栈上分配的对象也会在某些时候被销毁(即调用它们的析构函数)。

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


【解决方案1】:

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

析构函数运行时有一个理论模型,但通常这是不可观察的行为,因此是可优化的。 IE。许多 dtor 可以提前运行。

【讨论】:

    【解决方案2】:

    如果完全创建(考虑优化),它们会在自动存储中。 IE。堆栈。

    【讨论】:

    • 或者编译器想要放置它们的任何其他地方。
    猜你喜欢
    • 1970-01-01
    • 2012-02-24
    • 2015-07-23
    • 2021-11-28
    • 1970-01-01
    • 2018-10-14
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多