Le C ++ fournit-il une garantie pour la durée de vie d'une variable temporaire créée dans un appel de fonction mais non utilisée comme paramètre? Voici un exemple de classe:
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;
};
Et voici comment vous l'utiliseriez:
// 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);
Quand le destructeur de l'objet StringBuffer temporaire sera-t-il appelé? Est-ce:
- Avant l'appel à GetString?
- Après le retour de GetString?
- Dépendant du compilateur?
Je sais que C ++ garantit qu'une variable temporaire locale sera valide tant qu'il y aura une référence à elle - cela s'applique-t-il aux objets parents lorsqu'il y a une référence à une variable membre?
Merci.
m_str.reserve(maxlength)à char * Size(int maxlength), sinon le destructeur pourrait jeter.