Чи надає 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)іншому випадку деструктор може кинути.