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++保证本地临时变量只要存在引用就有效 - 当存在对成员变量的引用时,这是否适用于父对象?
谢谢。
char * Size(int maxlength)
中调用m_str.reserve(maxlength)
,否则析构函数可能会抛出异常。 - Mankarse