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'; }
このコードは、「one」、「two」、および「three」を出力します。一時オブジェクトが作成直後に破棄された場合、この動作は予期しないように見えるかもしれません。しかし、そうではありません。
[class.temporary] p4 で定義されている一時オブジェクトは、それらが作成されたポイントを含む完全な式の終了時に破棄されます。上の例では、完全な式が main 関数全体であるため、一時的な Foo オブジェクトはセミコロンで破棄されます。
この動作は標準で保証されており、指定されたコードの出力が C コンパイラ間で一貫したものになります。ただし、一般規則には例外がいくつかあります。
以上がC の一時オブジェクトはいつ破棄されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。