std::string -> Welche Logik steckt dahinter?
-
Hali, Halo,
Könnt ihr mit vllt erklären wie die STL-Klasse std::string arbeitet?
Wird bspw. immer, wenn man etwas hinzufügt (angängt) der gesamte Speicher neuallokiert (um deren Größe) anzupassen) und die Daten kopiert

Weiterhin interessiert es mich, wie das Problem der 'NUll-Terminierung' gelößt ist ?
WIrd jeweils die Länge abgespeichert?Vielen dank für kommende Erklärungen
.
-
Hallo
die genaue Implementierung der STL-Container ist nicht vorgebenen, sondern nur die Schnittstellen.
Deshalb kann es da nur allgemeine Antworten geben
Wird bspw. immer, wenn man etwas hinzufügt (angängt) der gesamte Speicher neuallokiert (um deren Größe) anzupassen) und die Daten kopiert
Die Strings werden intern eine kleine Menge an Speicher vorbelegen, um kleine Änderungen so abfangen zu können. Und der Konstruktor wird natürlich sofort die benötigte Menge belegen, wenn eine Quelle übergeben wird.
Außerdem wird manchmal auch Referenz-gezählt gearbeitet, wenn zwei STL-Strings kopiert werden, wird nicht gleich der Inhalt auch kopiert sondern nur bei dem Ursprung ein Referenz-zähler erhöht.Weiterhin interessiert es mich, wie das Problem der 'NUll-Terminierung' gelößt ist ?
Ist intern nicht nötig denn...
WIrd jeweils die Länge abgespeichert?
Da der STL-String die Anzahl der Buchstaben als Eigenschaft besitzt (size), ist es anzumehmen das meistens das intern gespeichert wird, damit entfällt auch die Notwendigkeit einer NULL-Terminierung.
Und das ist auch ein Grund warum auf keinen Fall direkt von STL-String auf C-String gecastet werden darf, um dann direkt die Daten dort zu lesen, geschweige denn zu schreiben.bis bald
akari
-
Deine ganzen Fragen kann man eigentlich mit "Implementierungsabhängig" beantworten. Der Sourcecode zu deiner basic_string<>-Implementierung hast du ja, schau da rein.
Aber meistens dürfte es wohl so sein, das immer etwas mehr Speicher allokiert wird. So das nicht immer neuer Speicher angefordert werden muß, wenn man etwas hinzufügt. Die Länge des Strings wird sicherlich auch meistens gespeichert. Null-Terminierung haben wahrscheinlich auch die meisten Implementierungen zus. zur Länger-Speicherung mit bei.
-
Hui dank euch, da wartet ja Arbeit auf mich ...
