例如,当我以以下方式分配内存时,我可以看到这种情况:
Position* arr1 = new Position[5];
位置是我程序中的一个类,它使用x和y值描述位置点。
堆栈上将有一个指向堆上数组“arr1”的第一个元素(位置对象)的指针,因此它看起来像这样:
但是,如果我要创建一个指针数组,会如何?例如:
Position** arr2 = new Position* [2];
arr[0] = new Position(3, 7); // Constructs a point with x and y values.
arr[1] = new Position(9,6);
在第二个示例中,所有指针和对象都存储在内存中的什么位置?堆栈上是否有指向堆上的指针的指针,然后再指向堆上的对象或其他对象?
另外,如果我要使用
delete [] arr2;
,则对象将保留在内存中的什么位置?谢谢。
最佳答案
您有一个自动变量arr2
指针对象。其余的都在免费商店中。如果只使用delete[] arr2
,则将释放指针的内存,而不是指针所指向的对象的内存。
arr2 ---+ +---------------------------------+
| | |
| | |
+----> [Position*, Position*] |
| | | |
| | +----> [9, 6] |
| v |
| [3, 7] |
+---------------------------------+