0

当我在 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

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

4

5 回答 5

5

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

于 2012-07-13T06:56:32.583 回答
2

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

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

于 2012-07-13T06:57:14.990 回答
0

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

于 2012-07-13T06:57:19.500 回答
0

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

于 2012-07-13T07:09:46.350 回答
0

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

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

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

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

于 2012-07-13T07:16:46.667 回答