Wie sicher und zuverlässig sind C ++ - String-Literale?
Also, ich möchte besser verstehen, wie String-Literale in C ++ funktionieren. Ich befasse mich hauptsächlich mit Situationen, in denen Sie einem Zeiger die Adresse eines String-Literal zuweisen und es weitergeben. Beispielsweise
char* advice = "Don't stick your hands in the toaster.";
Now sagen wir, ich gebe diesen String einfach weiter, indem ich Zeiger für die Dauer des Programms kopiere. Sicher, es ist wahrscheinlich keine gute Idee, aber ich bin gespannt, was sich tatsächlich hinter den Kulissen abspielt.
Bei einem anderen Beispiel nehmen wir an, wir erstellen eine Funktion, die ein Zeichenfolgenliteral zurückgibt:
char* foo()
{
// function does does stuff
return "Yikes!"; // somebody's feeble attempt at an error message
}
Jetzt können wir sagen, dass diese Funktion sehr oft aufgerufen wird und das String-Literal nur etwa die Hälfte der Zeit verwendet wird, in der es aufgerufen wird:
// situation #1: it's just randomly called without heed to the return value
foo();
// situation #2: the returned string is kept and used for who knows how long
char* retVal = foo();
In der ersten Situation, was ist eigentlich los? Wird die Zeichenfolge nur erstellt, aber nicht verwendet und niemals freigegeben?
Wird in der zweiten Situation die Zeichenfolge beibehalten, solange der Benutzer dies für erforderlich hält? Was passiert, wenn es nicht mehr benötigt wird? Wird dieser Speicher dann freigegeben (vorausgesetzt, dass nichts mehr auf diesen Speicherplatz verweist)?
Versteh mich nicht falsch, ich habe nicht vor, solche String-Literale zu verwenden. Ich plane, einen Container zu verwenden, um meine Zeichenfolgen in Schach zu halten (wahrscheinlich std :: string). Meistens möchte ich nur wissen, ob diese Situationen Probleme bei der Speicherverwaltung oder bei beschädigten Daten verursachen können.