在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;
删除内存,是否会清除所有关联的内存位置?
答案 0 :(得分:5)
不,只有最后一个。其余的都将永远消失。这就是所谓的“内存泄漏”。
答案 1 :(得分:2)
不,您必须将每个new[]
与单独的delete[]
配对。
在您的示例中,前两个分配将丢失。内存泄漏。
答案 2 :(得分:0)
不是你以前分配的所有内存都丢失了。你应该考虑使用智能指针
答案 3 :(得分:0)
请注意,如果将智能指针指向对象而不是数组,则使用智能指针是很好的。
如果你使用struct / class包装数组就可以了。
你也可以使用STL Vector(你选择的智能指针)
答案 4 :(得分:0)
如果我使用delete [] sampleString删除内存;是否会清除所有相关的内存位置?
不,sampleString如何一次只能存储一个引用,所以当你将它发送到delete []
时,它只知道最后一个引用。
由于C++
默认情况下没有垃圾回收,因此在手动分配/解除分配时必须手动处理内存管理。
正如一些人指出的那样,你可能想要使用智能指针。