Maison > développement back-end > C++ > Combien de temps les pointeurs `std::string::c_str()` restent-ils valides ?

Combien de temps les pointeurs `std::string::c_str()` restent-ils valides ?

DDD
Libérer: 2024-12-12 16:38:17
original
521 Les gens l'ont consulté

How Long Do `std::string::c_str()` Pointers Remain Valid?

Durée de vie de std::string::c_str() Résultat

Question :

Dans un programme interfacé avec du code existant qui utilise des pointeurs const char, un développeur interroge sur la durée de vie de Résultats std::string::c_str(). Ils demandent spécifiquement si l'extrait de code suivant est sûr :

{
  std::string server = "my_server";
  std::string name = "my_name";

  Foo foo;
  foo.server = server.c_str();
  foo.name = name.c_str();

  // use Foo

  // Foo about to be destroyed (before name and server)
}
Copier après la connexion

Réponse :

La durée de vie des résultats std::string::c_str() dépend du la durée de vie de la chaîne et toutes les modifications ultérieures. Le résultat devient invalide si la chaîne est modifiée ou détruite. Par conséquent, il est généralement recommandé de faire une copie du résultat lorsque l'on envisage de le stocker pour une utilisation future.

Dans l'extrait de code fourni, les std::strings (serveur et nom) sont créés et modifiés dans le cadre de le bloc de code. Les résultats c_str() (foo.server et foo.name) pointent vers ces std::strings temporaires, qui sont détruites à la fin de la portée.

Cependant, les chaînes ne sont pas utilisées en dehors de la portée. , ce qui rend techniquement sûr la poursuite de l'utilisation des pointeurs const char dans use_foo() et ~Foo(). Cependant, si ces fonctions copient potentiellement les pointeurs vers d'autres emplacements, de véritables copies doivent être effectuées au lieu de simplement copier les pointeurs.

Par conséquent, même si l'extrait de code démontre un comportement techniquement correct dans ce cas spécifique, de bonnes pratiques de codage seraient impliquent de faire des copies des résultats c_str() s'ils doivent être stockés pour une utilisation ultérieure.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal