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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-26 05:36:31819ブラウズ

How Long Do Temporary Objects Live in C   Expressions?

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;
};

void GetString(char * str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);

この例では、一時 StringBuffer オブジェクトが作成され、そのサイズが() メソッドを呼び出して、バッファへのポインタを取得します。このポインタは、GetString() 関数に渡されます。

一時 StringBuffer オブジェクトの有効期間は、完全な式の終わり (GetString() の呼び出し) まで保証されます。したがって、一時オブジェクトのデストラクターは、GetString() が返された後に呼び出されます。この動作は、使用されているコンパイラに関係なく一貫しています。

この保証された有効期間は、一時オブジェクトが作成された式の最後まで有効であるという事実に依存する式テンプレートにとって非常に重要です。

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

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