Verwenden eines benutzerdefinierten Zuordners in std :: string, um einen bereits zugewiesenen Zeichenpuffer erneut zu verwenden

8

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?

    
user3612009 09.07.2014, 15:52
quelle

1 Antwort

8

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.

    
Mark B 09.07.2014 16:14
quelle