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'; }
出力が次のようになることは明らかです。 「1」、「2」、「3」になります。ここで疑問が生じます: この動作はすべての C コンパイラで保証されていますか?
C 標準によると、[class.temporary] には次のように記載されています。
「一時オブジェクトは最後のオブジェクトとして破棄される」このルールは、提供されたコード内の名前のない Foo オブジェクトなどの一時オブジェクトが最後に破棄されることを意味します。
[class.temporary] p5、p6 で概説されているように、この一般規則には例外があることに注意することが重要です。 、および p7:
配列初期化子でデフォルトで構築された一時オブジェクトの有効期間を短縮します。以上がC では一時オブジェクトの破棄順序は保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。