Maison > développement back-end > C++ > Est-il sûr de transmettre un `std::string::c_str()` temporaire à une fonction en C ?

Est-il sûr de transmettre un `std::string::c_str()` temporaire à une fonction en C ?

Barbara Streisand
Libérer: 2024-11-06 22:51:03
original
933 Les gens l'ont consulté

Is it safe to pass a temporary `std::string::c_str()` to a function in C  ?

Examen de la durabilité des chaînes temporaires dans std::string::c_str()

Dans le domaine de la programmation C, l'utilisation de chaînes temporaires soulève souvent des inquiétudes quant à leur gestion de la mémoire et leur durabilité. Cet article approfondit les spécificités de l'utilisation de std::string::c_str() avec des chaînes temporaires et examine sa conformité à la norme C.

Problème :

Considérez l'extrait de code suivant :

void consumer(char const* p)
{
  std::printf("%s", p);
}

std::string random_string_generator();

consumer(random_string_generator().c_str());
Copier après la connexion

Le code présente-t-il un comportement correct ou présente-t-il des pièges potentiels liés à la durée de vie des temporaires ?

Réponse :

Selon le standard C, après avoir créé un objet std::string temporaire et obtenu son pointeur c_str(), la durée de vie de l'objet string s'étend jusqu'à :

  • Une méthode non const du L'objet chaîne est invoqué
  • L'objet chaîne est explicitement détruit

Dans l'exemple de code fourni, l'objet temporaire std::string (random_string_generator()) est détruit à la fin du pleine expression, ni avant ni après. Puisque le consommateur est invoqué dans la même expression, le code est considéré comme bien formé.

Cependant, il est crucial de noter que si le consommateur stockait le pointeur pour une utilisation future, le code ne serait plus sûr. En effet, la durée de vie de l'objet chaîne temporaire aurait pris fin avant que le consommateur puisse accéder au pointeur.

Conclusion :

Le code en question est en effet bien formé selon au standard C, à condition qu'il soit utilisé dans la même expression. Comprendre les règles de durée de vie des temporaires est essentiel pour éviter les problèmes de gestion de la mémoire et garantir le bon comportement du programme.

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