2013-04-12 38 views
5

Tôi có thể giải phóng bộ nhớ của chuỗi ký tự char * sau khi tôi đã chuyển đổi nó thành chuỗi std :: không? Ví dụ:Tôi có thể giải phóng bộ nhớ của chuỗi char * khi gán nó cho 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 hài lòng với mã ở trên ngoại trừ '' std: string''. – gongzhitaao

+1

@gongzhitaao Chỉ vì biên dịch mã không có nghĩa là nó đúng. Bạn vẫn có thể dựa vào hành vi không xác định. Và 'std :: string' là hoàn toàn hợp lệ trong C++. Có thể bạn đã quên bao gồm ''. –

+1

@Nó biên dịch và chạy chính xác. Tôi cho rằng nếu nó không thể được giải phóng thì một số lỗi thời gian chạy sẽ xảy ra. Hơn nữa, ý tôi là '' std: string'' thay vì '' std :: string''. Xem lỗi đánh máy? – gongzhitaao

Trả lời

8

Có. std::string sao chép chuỗi C cơ bản.

Nguồn: Bảng 67 của § 21.4.2 của C++ 11 nháp N3376.

+0

Cảm ơn câu trả lời nhanh chóng – SSC

4

Có. Nhà xây dựng std::string tạo một bản sao của chuỗi được truyền cho nó.

Xem hàm tạo # 4 trên this page.

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

từ c-string

Sao chép null-chấm dứt chuỗi kí tự (C-string) chỉ bằng s.

+0

Cảm ơn bạn đã trả lời nhanh – SSC

Các vấn đề liên quan