首页 >后端开发 >C++ >为什么 C 中的临时对象会以令人惊讶的顺序被销毁?

为什么 C 中的临时对象会以令人惊讶的顺序被销毁?

DDD
DDD原创
2024-11-13 08:54:02338浏览

Why Are Temporary Objects Destroyed in a Surprising Order in C  ?

C 中的临时对象销毁

提供的代码演示了一种令人惊讶的行为,即临时对象以意外的顺序被销毁。然而,这种行为实际上是由 C 标准保证的。

说明

临时对象,也称为未命名对象,是在表达式计算结果为不是引用类型的类类型。它们通常用于在表达式求值期间保存中间结果。

在给定的代码中,从字符串文字创建类型 Foo 的临时对象,并在对象的生命周期结束时调用其析构函数。析构函数打印存储在对象的 m_name 成员中的名称。

临时对象的生命周期在创建它的完整表达式的末尾结束。在提供的代码中,完整表达式是语句:

Foo{ "one" };

因此,临时对象的生命周期在此语句后面的分号处结束。结果,调用临时对象的析构函数,并打印字符串“one”。

规则的例外

虽然一般规则规定临时对象在完整表达式结束时被销毁,C 标准中指定了一些例外([class.temporary] p5-p7):

  • 缩短数组初始值设定项中默认构造的临时对象的生命周期。
  • 在复制数组时缩短构造函数的默认参数的生命周期。
  • 通过绑定对临时对象的引用来延长临时对象的生命周期。
  • 延长生命周期for-range-initializer 中的临时对象。

这些例外允许在特定情况下更灵活地管理临时对象的生命周期。

以上是为什么 C 中的临时对象会以令人惊讶的顺序被销毁?的详细内容。更多信息请关注PHP中文网其他相关文章!

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