说我有这个:
char * p = new char[10];
std::string str = p;
我必须delete[]
p
或std::string
为我做这件事吗?
答案 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为我做了吗?
没有