質問:
一時オブジェクトのデストラクターはいつ呼び出されますか?関数呼び出し内で作成されましたが、パラメータとして使用されていませんか?具体的には、次のコードを考えてみましょう:
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; }; std::string mystring; GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
答え:
一時 StringBuffer オブジェクトのデストラクターは、GetString の呼び出し後で呼び出されます。
C 標準 (12.2 一時的) に準拠オブジェクト)、一時オブジェクトの存続期間は、(a) それ自体が別の完全式内でオペランド (クラス オブジェクトの構築を除く) として現れず、(b) である完全式の終了時に終了します。
コード例では、GetString の呼び出しは完全な式であり、一時的な StringBuffer オブジェクトがその式内に作成されます。したがって、一時オブジェクトの有効期間は、GetString への呼び出しが返された後に終了します。
この有効期間保証により、一時オブジェクトは不要になるまで有効なままになります。これにより、式が完全に評価されるまで一時オブジェクトが保持されるため、式テンプレートで一時オブジェクトへの参照を保持できるようになります。
以上が関数呼び出しで一時 C オブジェクトのデストラクターが呼び出されるのはいつですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。