Czy mogę zwolnić pamięć char * wskazanego ciągu po przekonwertowaniu go na std :: string? Na przykład:Czy mogę zwolnić pamięć ciągu znaków char * podczas przydzielania go do 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? */
vs2012 jest zadowolony z powyższego kodu, z wyjątkiem '' std: string''. – gongzhitaao
@gongzhitaao Tylko dlatego, że kompilacja kodu nie oznacza, że jest poprawna. Nadal można polegać na niezdefiniowanym zachowaniu. A 'std :: string' jest całkowicie poprawny w C++. Prawdopodobnie zapomniałeś dodać ''. –
@To kompiluje i działa poprawnie. Przypuszczam, że jeśli nie można go zwolnić, wystąpi błąd w czasie wykonywania. Co więcej, mam tu na myśli '' std: string'' zamiast '' std :: string''. Zobacz literówkę? – gongzhitaao