2013-04-12 58 views
5

我可以在將char *指向的字符串轉換爲std :: string後釋放內存嗎? 例如:當我將它分配給std :: string時,我可以釋放char *字符串的內存嗎?

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很滿意上面的代碼,除了'std:string''。 – gongzhitaao

+1

@ gongzhitaao只是因爲代碼編譯並不意味着它是正確的。你仍然可以依靠未定義的行爲。而'std :: string'在C++中完全有效。你可能只是忘了包含''。 –

+1

@編譯並正確運行。我想如果它不能被釋放,那麼會出現一些運行時錯誤。更重要的是,我的意思是'std:string''而不是''std :: string''。看錯字? – gongzhitaao

回答

8

是的。 std::string複製底層的C字符串。

資料來源:§的表67,C++ 11草案N3376的21.4.2。

+0

感謝您快速回答 – SSC

4

是的。 std::string構造函數將傳遞給它的字符串的副本。

請參閱this page上的構造函數#4。

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

選自c-串

複製空終止字符序列(C-字符串)指出由s。

+0

感謝您的快速回答 – SSC

相關問題