2014-07-09 8 views
8

Ich muss einen bereits zugewiesenen char * -Puffer (mit dem Inhalt der Zeichenfolge) 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?Verwenden eines benutzerdefinierten Zuordners in Std :: string, um einen bereits zugewiesenen Zeichenpuffer zu verwenden

+0

Es gibt Vorschläge für 'string_view' oder' string_ref', die die Schnittstelle 'std :: string' anbieten, ohne den zugrunde liegenden Puffer zu besitzen. Es gibt auch Bibliotheken, die ihre eigenen Versionen einer solchen Klasse haben. Google diese Begriffe und Sie könnten etwas, das Ihren Bedürfnissen entspricht. – Praetorian

+0

gute Info! Werde einen Blick darauf werfen. Aber für diesen speziellen Fall muss ich bei std :: string bleiben, da dies Teil einer API ist. Danke für die Information. – user3612009

Antwort

8

std::string ist ein typedef von basic_string, das bereits ausdrücklich den Standardzuordner verwendet. Es gibt keine Möglichkeit für std::string, einen anderen Zuordner zu verwenden. Selbst wenn Sie einen neuen Typdef von basic_string mit dem gewünschten Zuordner erstellt haben, konnte er nicht an eine API übergeben werden, die 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, wenn Sie in der Lage sind, dies zu tun, wäre Ihre „Orignal“ char* Puffer als std::string unter Verwendung resize zuzuordnen. Dann könnten Sie swap diese Zeichenfolge in Ihre neue, um es Besitz zu nehmen.

+0

Ah, dachte .. Kein Glück mit diesem dann .. – user3612009

Verwandte Themen