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) }
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!