2013-04-12 10 views
5

Posso liberare la memoria della stringa char * point dopo averla convertita in una stringa std :: string? Per esempio:Posso liberare la memoria della stringa char * quando la assegno a std :: string?

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? */ 
+0

vs2012 è soddisfatto del codice precedente tranne '' std: string''. – gongzhitaao

+1

@gongzhitaao Solo perché il codice viene compilato non significa che sia corretto. Potresti ancora fare affidamento su un comportamento indefinito. E 'std :: string' è perfettamente valido in C++. Probabilmente hai semplicemente dimenticato di includere ''. –

+1

@Compila e funziona correttamente. Suppongo che se non potrebbe essere liberato allora si verificherà qualche errore di runtime. Inoltre, ciò che intendo è '' std: string'' invece di '' std :: string''. Vedi l'errore? – gongzhitaao

risposta

8

Sì. std::string copia la stringa C sottostante.

Fonte: Tabella 67 di § 21.4.2 della bozza N3376 C++ 11.

+0

Grazie per la risposta veloce – SSC

4

Sì. Il costruttore std::string fa passare una copia della stringa ad esso.

Vedere il costruttore n. 4 su this page.

string (const char* s); // from c-string 

da c-stringa

Copie la sequenza di caratteri alla terminazione Null (C-stringa) indicate da s.

+0

Grazie per la rapida risposta – SSC

Problemi correlati