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;
};
そして、これはあなたがそれをどのように使用するかです:
// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);
std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
一時的なStringBufferオブジェクトのデストラクタはいつ呼び出されますか?それは...ですか:
- GetStringを呼び出す前に?
- GetStringが戻った後?
- コンパイラ依存?
C ++は、参照が存在する限り、ローカルの一時変数が有効であることを保証していることを知っています。これは、メンバー変数への参照がある場合、親オブジェクトに適用されますか?
ありがとう。
m_str.reserve(maxlength)in を呼び出す必要がありますchar * Size(int maxlength)。そうしないと、デストラクタがスローする可能性があります。