Ich muss einen bereits zugewiesenen char * -Puffer (mit dem String-Inhalt) in einem std :: string-Objekt verwenden. Nach einigen Recherchen fand ich heraus, dass dies fast unmöglich ist und std :: string würde immer eine eigene Kopie von Daten haben. Der einzige verbleibende Weg, den ich mir vorstellen kann, ist, einen benutzerdefinierten Zuordner zu verwenden, der die Adresse des bereits zugewiesenen Zeichenpuffers zurückgibt. Damit das funktioniert, sollte std :: string nur den Allokator verwenden, um Speicher für seine String-Daten zu reservieren und sonst nichts. Ist das der Fall?
std::string
ist ein typedef von basic_string
, das bereits explizit den Standardzuordner verwendet. Es gibt keine Möglichkeit für std::string
, einen anderen Zuordner zu verwenden. Selbst wenn Sie einen neuen Typedef von basic_string
mit dem gewünschten Allokator erstellt haben, konnte er nicht an eine API übergeben werden, die ein std::string
erwartet.
Leider kann ich keine Möglichkeit sehen, alle Anforderungen zu erfüllen, die Sie in einem der aktuellen C ++ - Standards festgelegt haben, es sei denn, Sie können eine oder mehrere Ihrer Anforderungen irgendwie lockern.
Eine mögliche kreative Lösung wäre, wenn Sie dazu in der Lage wären, Ihr "orignal" char*
buffer als std::string
unter Verwendung von resize
zuzuweisen. Dann könntest du swap
in deine neue Zeichenfolge einfügen, damit sie Besitz übernimmt.
Tags und Links c++ memory-management stdstring