Bietet C ++ eine Garantie für die Lebensdauer einer temporären Variablen, die innerhalb eines Funktionsaufrufs erstellt, aber nicht als Parameter verwendet wird? Hier ist eine Beispielklasse:
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;
};
Und so würden Sie es verwenden:
// 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);
Wann wird der Destruktor für das temporäre StringBuffer-Objekt aufgerufen? Ist es:
- Vor dem Aufruf von GetString?
- Nachdem GetString zurückgekehrt ist?
- Compiler abhängig?
Ich weiß, dass C ++ garantiert, dass eine lokale temporäre Variable gültig ist, solange ein Verweis darauf vorhanden ist. Gilt dies für übergeordnete Objekte, wenn ein Verweis auf eine Mitgliedsvariable vorhanden ist?
Vielen Dank.
m_str.reserve(maxlength)in char * Size(int maxlength), sonst könnte der destructor werfen.