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 サイトの他の関連記事を参照してください。