Maison >développement back-end >C++ >Combien de temps durent les objets temporaires C ?
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; };
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);
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!