说我有这个:
char * p = new char[10];
std::string str = p;
我必须delete[]
p
或确实std::string
为我这样做吗?
我必须 delete[] p 还是 std::string 为我这样做?
不,它不是通常,每个都new
必须与一个delete
. 所以,
char * p = new char[10];
/* put something into your buffer */
std::string str = p;
/* some stuff */
delete [] p;
但是,如果您在堆栈上创建数组,则不需要这样做:
{
char p[10];
/* put something into your buffer */
std::string str = p;
// delete [] p; // no delete required
}
您必须自己释放内存,因为string
它将按值复制它,str
即将在堆上分配一个缓冲区来保存该值。
如果str
会释放内存,那么下面的代码会发生什么?
std::string str = "hello, world"; //"hello, world" itself is not on heap
没有人会管理你的记忆。您分配的每个内存都必须由您释放。一些 Windows API 返回堆分配的结果,您也必须释放这些结果。我不记得任何其他库或 API 释放我分配的内存的情况。
我必须删除[] p
是的。
还是 std::string 为我这样做?
不。