Czy C ++ zapewnia gwarancję na cały okres istnienia zmiennej tymczasowej, która jest tworzona w wywołaniu funkcji, ale nie jest używana jako parametr? Oto przykładowa klasa:
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;
};
A oto jak byś tego użył:
// 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);
Kiedy zostanie wywołany destruktor tymczasowego obiektu StringBuffer? Czy to:
- Przed wywołaniem GetString?
- Po zwrocie GetString?
- Zależny od kompilatora?
Wiem, że C ++ gwarantuje, że lokalna zmienna tymczasowa będzie ważna, dopóki istnieje do niej odwołanie - czy dotyczy to obiektów nadrzędnych, gdy istnieje odwołanie do zmiennej składowej?
Dzięki.
m_str.reserve(maxlength)w char * Size(int maxlength)przeciwnym razie destruktor może rzucić.