ホームページ > バックエンド開発 > C++ > C の一時オブジェクトの存続期間はどのくらいですか?

C の一時オブジェクトの存続期間はどのくらいですか?

Barbara Streisand
リリース: 2024-12-23 13:36:02
オリジナル
524 人が閲覧しました

How Long Do C   Temporary Objects Live?

C における一時オブジェクトのライフタイム

C では、一時変数のライフタイムが、内部で構築されている完全な式の終わりまで延長されることが保証されます。これは、パラメータとして渡されずに関数呼び出しで作成されるような一時オブジェクトに適用されます。

たとえば、次のクラスを考えてみましょう:

class StringBuffer {
public:
    StringBuffer(std::string& str) : m_str(str) { m_buffer.push_back(0); }
    ~StringBuffer() { m_str = &m_buffer[0]; }
    char* Size(int maxlength) { m_buffer.resize(maxlength + 1, 0); return &m_buffer[0]; }
private:
    std::string& m_str;
    std::vector<char> m_buffer;
};
ログイン後にコピー

このクラスを次のように使用すると:

// Crusty old API that cannot be changed
void GetString(char* str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
ログイン後にコピー

一時 StringBuffer オブジェクトのデストラクターは、GetString が返された後に呼び出されます。この動作は C 標準によって保証されており、関数呼び出しで一時オブジェクトを確実に使用できるようになります。

標準では、一時オブジェクトの有効期間が、最も外側の完全な式の終わりまで延長されると指定されています。他の式の一部ではない式。この場合、完全な式は関数呼び出しであるため、一時オブジェクトの有効期間は関数が戻るまで延長されます。

この保証は、複雑な式内で一時オブジェクトへの参照を保持できる式テンプレートにとって重要です。これにより、式全体が評価されるまでオブジェクトが有効なままであることが保証されます。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート