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 编译器中保持一致。但是,一般规则有一些例外:
以上是C 中的临时对象何时被销毁?的详细内容。更多信息请关注PHP中文网其他相关文章!