Гарантированное время жизни временного в 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 ++ гарантирует, что локальная временная переменная будет действительна, пока есть ссылка на нее - относится ли это к родительским объектам, когда есть ссылка на переменную-член?

Спасибо.

c++
93 голоса | спросил Mark Ransom 25 FebruaryEurope/MoscowbWed, 25 Feb 2009 08:36:59 +0300000000amWed, 25 Feb 2009 08:36:59 +030009 2009, 08:36:59

0 ответов


Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132