Ich habe kürzlich festgestellt, dass std::strstream
dies zugunsten von abgelehnt wurde std::stringstream
. Es ist schon eine Weile her, seit ich es benutzt habe, aber es hat das getan, was ich damals tun musste, und war überrascht, von seiner Abwertung zu hören.
Meine Frage ist, warum diese Entscheidung getroffen wurde und welche Vorteile es std::stringstream
gibt, die fehlen std::strstream
?
c++
stringstream
strstream
und und
quelle
quelle
Antworten:
Die
strstream
Rückgabechar *
war sehr schwierig zu handhaben, da nirgends angegeben wurde, wie sie zugeteilt worden war. Es war daher unmöglich zu wissen, ob Sie es löschen oder free () darauf aufrufen oder etwas ganz anderes tun sollten. Die einzige wirklich zufriedenstellende Möglichkeit, die Zuordnung aufzuheben, bestand darin, siestrstream
über diefreeze()
Funktion an die zu übergeben. Dies war hinreichend nicht offensichtlich, so dass viele Leute es falsch verstanden haben. Dasstringstream
gibt ein String-Objekt zurück, das sich selbst verwaltet und weitaus weniger fehleranfällig ist.Es gab auch das Problem,
ends
die Zeichenfolge beenden zu müssen, aber ich glaube, das Problem der Freigabe war der Hauptgrund für die Ablehnung.quelle
Einfachere Speicherverwaltung. (Kann sich jemand erinnern, wer unter welchen Bedingungen für die Freigabe des zugewiesenen Speichers verantwortlich ist?)
(Da strstream immer noch etwas bereitstellt, das an anderer Stelle nicht verfügbar ist, wird es weiterhin in C ++ 0X vorhanden sein - zumindest das letzte Mal, als ich den Entwurf überprüft habe).
quelle
c_str = stream.str(); /*use c_str*/ stream.freeze(false);
A
strstream
baut achar *
. Astd::stringstream
baut astd::string
. Ich nehme an, dassstrstream
s wegen des Potenzials eines Pufferüberlaufs veraltet sind, wasstd::string
automatisch verhindert wird.quelle
Aus persönlicher Sicht habe ich bei mehr als einer Gelegenheit obskure Speicherverfälschungen gesehen, deren Aufspüren Tage oder Wochen gedauert hat und die schließlich verwendet wurden
strstream
. Sobald es durchstringstream
die Korruption ersetzt wurde, verschwand es und ich stellte keine weiteren Fragen! Das hat mir gereicht.quelle