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'; }
很明显,输出将是“一”、“二”、“三”。这就提出了一个问题:所有 C 编译器都保证这种行为吗?
根据 C 标准,在 [class.temporary] 中,它指出:
“临时对象作为最后一个对象被销毁评估(词法上)包含它们创建点的完整表达式的步骤。”
此规则意味着临时对象(例如提供的代码中未命名的 Foo 对象)将在最后被销毁创建它们时的完整表达式,即行末尾的分号。
值得注意的是,这个一般规则有一些例外,在 [class.temporary] p5、p6 中概述和 p7:
但是,在提供的代码中,这些例外情况都不适用,确保临时对象在各自表达式末尾得到销毁。
以上是C 中临时对象的销毁顺序是否得到保证?的详细内容。更多信息请关注PHP中文网其他相关文章!