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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-11-26 09:27:10354ブラウズ

When Do Temporary Objects in C   Get Destroyed?

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 コンパイラ間で一貫したものになります。ただし、一般規則には例外がいくつかあります。

  • 配列初期化子でデフォルトで構築された一時オブジェクトの有効期間が短くなる可能性があります。
  • 配列のコピー中のコンストラクターへのデフォルト引数にも、
  • 一時オブジェクトへの参照をバインドすると、その有効期間が延長されます。
  • for-range-initializer 内の一時オブジェクトの有効期間は延長されます。

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

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