C での一時オブジェクトの破棄
提供されたコードは、一時オブジェクトが予期しない順序で破棄されるという驚くべき動作を示しています。ただし、この動作は実際には C 標準によって保証されています。
説明
名前のないオブジェクトとも呼ばれる一時オブジェクトは、式が次のように評価されるときに作成されます。参照型ではないクラス型。これらは通常、式の評価中に中間結果を保持するために使用されます。
指定されたコードでは、Foo 型の一時オブジェクトが文字列リテラルから作成され、オブジェクトの有効期間が終了するとそのデストラクターが呼び出されます。デストラクターは、オブジェクトの m_name メンバーに格納されている名前を出力します。
一時オブジェクトの有効期間は、それが作成された完全な式の終了時に終了します。提供されたコードでは、完全な式は次のステートメントです。
Foo{ "one" };
したがって、一時オブジェクトの有効期間は、このステートメントに続くセミコロンで終了します。その結果、一時オブジェクトのデストラクターが呼び出され、文字列「one」が出力されます。
ルールの例外
一般的なルールでは次のように規定されています。一時オブジェクトは完全な式の最後に破棄されます。C 標準で指定されている例外がいくつかあります ([class.temporary] p5-p7):
これらの例外により、特定の状況における一時オブジェクトの有効期間をより柔軟に管理できるようになります。
以上がC ではなぜ一時オブジェクトが驚くべき順序で破棄されるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。