2013-04-12 13 views
5

std :: stringに変換した後にchar *のポイント文字列のメモリを解放できますか? 例:これを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 §の21.4.2 C++ 11草案N3376。

+0

素早くお答えいただきありがとうございます – SSC

4

はい。 std::stringコンストラクタは、渡された文字列のコピーを作成します。

this pageのコンストラクタ#4を参照してください。

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

C列から

コピーヌル終了文字列(C列)は、Sが指し示します。

+0

素早くお返事ありがとうございます – SSC

関連する問題