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;
};
而且这里是你将如何使用它:
// 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++保证只要有一个引用它的本地临时变量就会有效 - 当这个变量有一个引用时它是否适用于父对象?
谢谢。
为什么不继承和重载或创建一个全局函数?我会更清洁,你不必创建一个班级打电话给成员。 – 2009-03-11 08:25:09
如果你打算使用它,你应该在`char * Size(int maxlength)`中调用`m_str.reserve(maxlength)`,否则析构函数会抛出。 – Mankarse 2012-03-18 02:22:18