Garantie à vie temporaire en C++?

Ne C++ fournir une garantie pour la durée de vie d'une variable temporaire qui est créé à l'intérieur d'un appel de fonction, mais pas utilisé en tant que 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 l'utiliser:

//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 la temporaire de StringBuffer objet appelé? Est-il:

  • Avant l'appel à GetString?
  • Après GetString retourne?
  • Compilateur dépendante?

Je sais que C++ garantit une variable temporaire sera valable aussi longtemps qu'il y a une référence à elle - cela s'applique à des objets parents quand il y a une référence à une variable de membre?

Grâce.

  • pourquoi ne pas hériter et de surcharge ou de faire une fonction globale? je serait plus propre et Vous ne voudriez pas avoir à créer une classe ony à l'appel d'un membre.
  • Si vous allez l'utiliser, vous devez appeler m_str.reserve(maxlength) dans char * Size(int maxlength), sinon le destructeur pourrait lancer.
InformationsquelleAutor Mark Ransom | 2009-02-25