【发布时间】:2014-08-23 06:47:15
【问题描述】:
根据我的理解,当我们用char* 调用string ctor 时发生深度复制,因此在构造函数调用字符串后,传递的char* 可以很容易删除 (是吗?)之后可以安全地使用新字符串。
char* cptr = new char[20];
cptr = "dynamic_cstring"; // will it make difference if i will use memset
std::cout << cptr << std::endl;
std::string str(cptr);
std::cout << str.c_str() << std::endl;
cptr = "another string"; // seems that string internal buffer is not pointing to cptr
std::cout << str.c_str() << std::endl;
delete[] cptr; // crashed at this line. why ?
当我使用 char* 初始化字符串时,如何防止内存泄漏?还是自动清洗?如果我使用类似的东西怎么办:
cptr[0] = 's';
std::string str(cptr);
// cptr = "another string";
delete[] cptr;
这种情况下需要删除吗?
【问题讨论】:
-
cptr = "dynamic_cstring";并不像你想的那样。 -
您的 cout 语句中不需要
str.c_str()。此外,您可以使用std::strnig str = "My string";直接初始化您的字符串。话虽如此,如果可能的话,最好避免使用任何 char*。
标签: c++ string pointers memory-leaks