首页 >后端开发 >C++ >C 中的临时对象何时被销毁?

C 中的临时对象何时被销毁?

Susan Sarandon
Susan Sarandon原创
2024-11-26 09:27:10298浏览

When Do Temporary Objects in C   Get Destroyed?

C 中的临时对象销毁

C 中的临时对象何时被销毁?当考虑以下代码片段时,就会出现这个问题:

#include <iostream>

struct Foo
{
    const char* m_name;

    ~Foo() { std::cout << m_name << '\n'; }
};

int main()
{
    Foo foo{"three"};
    Foo{"one"};   // unnamed object
    std::cout << "two" << '\n';
}

代码打印“一”、“二”和“三”。如果临时对象在创建后立即被销毁,则此行为可能看起来出乎意料。然而,事实并非如此。

[class.temporary] p4 中定义的临时对象在包含它们创建点的完整表达式的末尾被销毁。在上面的示例中,完整表达式是整个 main 函数,因此临时 Foo 对象在分号处被销毁。

此行为是标准保证的,使得给定代码的输出在 C 编译器中保持一致。但是,一般规则有一些例外:

  • 数组初始值设定项中默认构造的临时对象的生命周期可能会缩短。
  • 数组复制期间构造函数的默认参数也可能会缩短它们的生命周期缩短了。
  • 绑定对临时对象的引用可以延长它们的寿命生命周期。
  • for-range-initializer 中的临时对象具有更长的生命周期。

以上是C 中的临时对象何时被销毁?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn