2016-11-26 1 views
0
const char* s = std::string("text").c_str(); 
std::cout << s << std::endl; //This will print nothing because the data 
          //isn't available any longer 

std::string::c_str() gibt einen Zeiger auf die gespeicherten Daten zurück. Tatsächlich ist std::string("text") nur für die Zeit verfügbar, die ich benutze (z. B. wenn ich eine andere Instanz initialisiere), so dass am Ende der Destruktor aufgerufen wird, der die Daten löscht, die s auf nichts zeigen.Ist es möglich, ein const char * mit einem rvalue wie string.c_str() zu initialisieren?

Jetzt ist meine Frage, wenn es eine Möglichkeit gibt, die Daten irgendwo zu verschieben, wo sie nicht vom Destruktor gelöscht werden, so kann const char* darauf zeigen. Oder ist es nur möglich, wenn sie etwas wie einen Shared-Smart-Pointer verwenden würden, der weiß, ob etwas anderes auf die std::string Daten zeigt, so dass es noch nicht gelöscht ist.

Kopieren Sie die Daten irgendwo und darauf zeigen, ist nicht das, was ich suche.

Antwort

1

Eine Zeichenfolge kann intern nicht für die Verwendung von Referenzzählern verwendet werden. Wenn Sie einen Zeiger auf seine Daten verwenden möchten, müssen Sie sicherstellen, dass die Zeichenfolge erhalten bleibt. Die einzige Alternative ist das Kopieren/Verschieben der Daten in ein anderes String-Objekt.

Verwandte Themen