ホームページ >バックエンド開発 >C++ >C で一時オブジェクトはいつ破棄されますか?

C で一時オブジェクトはいつ破棄されますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-12 17:34:02328ブラウズ

When are Temporary Objects Destroyed in C  ?

C での一時オブジェクトの破棄

C では、式の評価中にオンデマンドで一時オブジェクトが作成されます。これらのオブジェクトは式のスコープ内にのみ存在し、式が終了すると自動的に破棄されます。

3 つのコード行がある次の例を考えてみましょう。

Foo foo{"three"};
Foo{"one"};
std::cout << "two" << '\n';

コードは "one"、" を出力します。 「2」、「3」の順です。この動作は、一時オブジェクトの破棄を管理する次の規則に基づいて発生します。

式評価の終了時の破棄

一時オブジェクトは、完全な式の評価が完了すると破棄されます。彼らは創造されました。この例では、「one」と「three」の一時オブジェクトは、それらが存在するそれぞれの行の後に破棄されます。

ルールの例外

一時オブジェクトの間通常、破棄はこのルールに従いますが、[class.temporary] p4-p7:

  1. 配列初期化子でデフォルトで構築された一時オブジェクトの有効期間が短縮されました。
  2. 短縮されたものに示すように、特定の例外が存在します。配列コピー中のデフォルトのコンストラクター引数の有効期間。
  3. 一時オブジェクトへの参照をバインドすることで、一時オブジェクトの有効期間を延長。
  4. for-range-initializer での一時オブジェクトの有効期間を延長。

提供された例では、これらの例外はいずれも適用されないため、一時オブジェクトはそれぞれの行の後に破棄され、指定された出力が得られます。

以上がC で一時オブジェクトはいつ破棄されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。