Kann ich den Speicher des char * pointed string freigeben, nachdem ich ihn in einen std :: string konvertiert habe? Zum Beispiel:Kann ich den Speicher der Zeichenkette char * freigeben, wenn ich ihn std :: string zuweise?
char* c_string;
c_string = strdup("This is a test");
std::string cpp_string;
cpp_string(c_string);
free(c_string); /* can I call free here? */
vs2012 ist glücklich mit dem obigen Code außer '' std: string''. – gongzhitaao
@gongzhitaao Nur weil Code kompiliert bedeutet nicht, dass es korrekt ist. Sie könnten sich immer noch auf undefiniertes Verhalten verlassen. Und 'std :: string' ist in C++ perfekt gültig. Sie haben wahrscheinlich vergessen, '' einzuschließen. –
@It kompiliert und läuft korrekt. Ich nehme an, wenn es nicht freigegeben werden könnte, würde ein Laufzeitfehler auftreten. Was mehr bedeutet, was ich meine, ist '' std: string'' anstelle von '' std :: string''. Siehst du den Tippfehler? – gongzhitaao