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)
的char * Size(int maxlength)
,否则,析构函数可以抛出。