我应该在将它发送到std :: string后删除堆分配的字符串吗?

时间:2013-08-16 01:08:06

标签: c++

说我有这个:

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

我必须delete[] pstd::string为我做这件事吗?

4 个答案:

答案 0 :(得分:4)

  

我是否必须删除[] 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
}

答案 1 :(得分:2)

你必须自己释放内存,因为string 按值复制 ,即str会在堆上分配一个缓冲区来保存那个价值。

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

std::string str = "hello, world"; //"hello, world" itself is not on heap

答案 2 :(得分:1)

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

答案 3 :(得分:0)

  

我是否必须删除[] p

  

或者std :: string为我做了吗?

没有