C 中的临时对象销毁
提供的代码演示了一种令人惊讶的行为,即临时对象以意外的顺序被销毁。然而,这种行为实际上是由 C 标准保证的。
说明
临时对象,也称为未命名对象,是在表达式计算结果为不是引用类型的类类型。它们通常用于在表达式求值期间保存中间结果。
在给定的代码中,从字符串文字创建类型 Foo 的临时对象,并在对象的生命周期结束时调用其析构函数。析构函数打印存储在对象的 m_name 成员中的名称。
临时对象的生命周期在创建它的完整表达式的末尾结束。在提供的代码中,完整表达式是语句:
Foo{ "one" };
因此,临时对象的生命周期在此语句后面的分号处结束。结果,调用临时对象的析构函数,并打印字符串“one”。
规则的例外
虽然一般规则规定临时对象在完整表达式结束时被销毁,C 标准中指定了一些例外([class.temporary] p5-p7):
这些例外允许在特定情况下更灵活地管理临时对象的生命周期。
以上是为什么 C 中的临时对象会以令人惊讶的顺序被销毁?的详细内容。更多信息请关注PHP中文网其他相关文章!