Maison >développement back-end >C++ >Combien de temps les objets temporaires durent-ils dans les expressions C ?

Combien de temps les objets temporaires durent-ils dans les expressions C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-26 05:36:31852parcourir

How Long Do Temporary Objects Live in C   Expressions?

Durée de vie des objets temporaires en C

En C , les objets temporaires sont créés lorsque les expressions sont évaluées. La référence à un objet temporaire est valide jusqu'à la fin de son expression complète, qui est l'expression la plus externe dans laquelle l'objet temporaire ne fait pas partie d'une autre expression. Cela permet aux objets temporaires d'être utilisés comme arguments dans les appels de fonction et renvoyés par les fonctions.

Considérons l'exemple suivant :

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;
};

void GetString(char * str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);

Dans cet exemple, un objet StringBuffer temporaire est créé et sa taille () est appelée pour obtenir un pointeur vers un tampon. Ce pointeur est ensuite passé à la fonction GetString().

La durée de vie de l'objet StringBuffer temporaire est garantie jusqu'à la fin de l'expression complète, qui est l'appel à GetString(). Par conséquent, le destructeur de l'objet temporaire sera appelé après le retour de GetString(). Ce comportement est cohérent quel que soit le compilateur utilisé.

Cette durée de vie garantie est cruciale pour les modèles d'expression, qui reposent sur le fait que les objets temporaires resteront valides jusqu'à la fin de l'expression dans laquelle ils sont créés.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn