2013-04-12 1 views
5

std :: string으로 변환 한 후 char * pointed 문자열의 메모리를 해제 할 수 있습니까? 예를 들어 :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-문자열)들에 의해 지적.

+0

빠른 답변 감사합니다 – SSC

관련 문제