Предоставляет ли С++ гарантию на время жизни временной переменной, которая создается в вызове функции, но не используется в качестве параметра? Вот пример класса:
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?
- Зависит от компилятора?
Я знаю, что С++ гарантирует, что локальная временная переменная будет действительна до тех пор, пока существует ссылка на нее - применимо ли это к родительским объектам, когда есть ссылка на переменную-член?
Спасибо.