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

Combien de temps durent les objets temporaires C ?

Barbara Streisand
Libérer: 2024-12-23 13:36:02
original
523 Les gens l'ont consulté

How Long Do C   Temporary Objects Live?

Durée de vie des objets temporaires en C

C garantit que la durée de vie d'une variable temporaire s'étend jusqu'à la fin de l'expression complète dans laquelle elle est construite. Cela s'applique aux objets temporaires comme ceux créés dans les appels de fonction sans être passés en paramètres.

Par exemple, considérons la classe suivante :

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;
};
Copier après la connexion

Si nous utilisons cette classe comme suit :

// Crusty old API that cannot be changed
void GetString(char* str, int maxlength);

std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
Copier après la connexion

Le destructeur de l'objet StringBuffer temporaire sera appelé après le retour de GetString. Ce comportement est garanti par le standard C et permet une utilisation fiable des objets temporaires dans les appels de fonction.

Le standard précise que la durée de vie d'un objet temporaire s'étend jusqu'à la fin de l'expression complète, qui est la plus externe expression qui ne fait partie d’aucune autre expression. Dans ce cas, l'expression complète est l'appel de fonction, donc la durée de vie de l'objet temporaire s'étend jusqu'au retour de la fonction.

Cette garantie est cruciale pour les modèles d'expression, qui peuvent contenir des références à des objets temporaires dans des expressions complexes. Il garantit que les objets restent valides jusqu'à ce que l'expression entière soit évaluée.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal