1

说我有这个:

char * p = new char[10];
std::string str = p;

我必须delete[] p或确实std::string为我这样做吗?

4

4 回答 4

4

我必须 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
}
于 2013-08-16T01:12:11.723 回答
2

您必须自己释放内存,因为string它将按值复制它str即将在堆上分配一个缓冲区来保存该值。

如果str会释放内存,那么下面的代码会发生什么?

std::string str = "hello, world"; //"hello, world" itself is not on heap
于 2013-08-16T01:10:31.387 回答
1

没有人会管理你的记忆。您分配的每个内存都必须由您释放。一些 Windows API 返回堆分配的结果,您也必须释放这些结果。我不记得任何其他库或 API 释放我分配的内存的情况。

于 2013-08-16T01:15:53.103 回答
0

我必须删除[] p

是的。

还是 std::string 为我这样做?

不。

于 2013-08-16T01:13:29.790 回答