在c ++中多次初始化数组会发生什么?

时间:2012-07-13 06:55:03

标签: c++

在c ++中多次初始化变量时,内存位置会发生什么变化?例如:

LPWSTR sampleString = new whcar_t[10];
//some operations here
sampleString = new wchar_t[2];
//some operations here
sampleString = new wchar_t[25];
//some operations here

如果使用delete [] sampleString;删除内存,是否会清除所有关联的内存位置?

5 个答案:

答案 0 :(得分:5)

不,只有最后一个。其余的都将永远消失。这就是所谓的“内存泄漏”。

答案 1 :(得分:2)

不,您必须将每个new[]与单独的delete[]配对。

在您的示例中,前两个分配将丢失。内存泄漏。

答案 2 :(得分:0)

不是你以前分配的所有内存都丢失了。你应该考虑使用智能指针

答案 3 :(得分:0)

请注意,如果将智能指针指向对象而不是数组,则使用智能指针是很好的。
如果你使用struct / class包装数组就可以了。 你也可以使用STL Vector(你选择的智能指针)

答案 4 :(得分:0)

  

如果我使用delete [] sampleString删除内存;是否会清除所有相关的内存位置?

不,sampleString如何一次只能存储一个引用,所以当你将它发送到delete []时,它只知道最后一个引用。

由于C++默认情况下没有垃圾回收,因此在手动分配/解除分配时必须手动处理内存管理。

正如一些人指出的那样,你可能想要使用智能指针。