例如,当我以以下方式分配内存时,我可以看到这种情况:

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]                       |
           +---------------------------------+

09-10 04:24
查看更多