Heim > Backend-Entwicklung > C++ > Wie lange bleiben „std::string::c_str()'-Zeiger gültig?

Wie lange bleiben „std::string::c_str()'-Zeiger gültig?

DDD
Freigeben: 2024-12-12 16:38:17
Original
503 Leute haben es durchsucht

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

Lebensdauer von std::string::c_str() Ergebnis

Frage:

In einem Programm, das mit Legacy-Code interagiert, der const char-Zeiger verwendet, fragt ein Entwickler nach der Lebensdauer von std::string::c_str() Ergebnisse. Sie fragen insbesondere, ob das folgende Code-Snippet sicher ist:

{
  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)
}
Nach dem Login kopieren

Antwort:

Die Lebensdauer der std::string::c_str()-Ergebnisse hängt von der ab Lebensdauer des Strings und alle nachfolgenden Änderungen. Das Ergebnis wird ungültig, wenn die Zeichenfolge geändert oder zerstört wird. Daher wird generell empfohlen, eine Kopie des Ergebnisses zu erstellen, wenn Sie es für die zukünftige Verwendung speichern möchten.

Im bereitgestellten Code-Snippet werden die std::strings (Server und Name) im Rahmen von erstellt und geändert Der Codeblock. Die c_str()-Ergebnisse (foo.server und foo.name) verweisen auf diese temporären std::strings, die am Ende des Gültigkeitsbereichs zerstört werden.

Die Zeichenfolgen werden jedoch nicht außerhalb des Gültigkeitsbereichs verwendet , wodurch es technisch sicher ist, die const char-Zeiger in use_foo() und ~Foo() weiterhin zu verwenden. Wenn diese Funktionen jedoch möglicherweise die Zeiger an andere Stellen kopieren, sollten echte Kopien erstellt werden, anstatt die Zeiger einfach zu kopieren.

Daher zeigt das Code-Snippet in diesem speziellen Fall zwar technisch korrektes Verhalten, gute Codierungspraxis würde dies jedoch tun Dazu gehört das Erstellen von Kopien der c_str()-Ergebnisse, wenn diese zur späteren Verwendung gespeichert werden müssen.

Das obige ist der detaillierte Inhalt vonWie lange bleiben „std::string::c_str()'-Zeiger gültig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage