数组对象存在于堆上

时间:2011-11-05 16:23:15

标签: arrays object

如果一个类有一个数组作为其成员,并且如果创建了该类的对象,那么该数组对象的存在位置。我的意思是类的对象保留在堆上,因此该数组对象保留为该类对象中的对象,或者它在堆上具有独立的存在,并与类'对象具有某种链接。

1 个答案:

答案 0 :(得分:0)

既然你在谈论内存所在的位置以及对象,我猜你的意思是C ++。如果那不是真的,正如马特所说,在你的问题中指明这一点可能会有所帮助,所以知道你正在使用的语言的人可以回答:)。

在C ++中,成员数组是放在对象的内存中还是单独放在堆上,取决于数组的声明方式:静态成员数组将放在对象内,而动态成员数组将存在于新堆中存储器中。


如果静态声明数组:

class MyStaticArrayClass
{
    int myArray[10];
    // ...
};

如果声明MyStaticArrayClass对象,则该数组将位于MyStaticArrayClass对象本身内。也就是说,如果你在堆栈上声明你的对象:

MyStaticArrayClass myObject;

myArray的内容也将在堆栈上,而如果你在堆上声明你的对象:

MyStaticArrayClass * myObjectPtr = new MyStaticArrayClass;

然后myArray的内容将在堆上,但是在myObjectPtr指向的内存中(当你调用delete myObjectPtr时,MyStaticArrayClass的默认析构函数将负责为你释放这个内存。)。


如果动态声明数组:

class MyDynamicArrayClass
{
    int * myArray;
    // constructor initializes to myArray = new int[10];
    // ...
};

如果声明MyDynamicArrayClass对象,则该数组将位于堆上,位于MyDynamicArrayClass对象本身的外部。 (您需要编写一个自定义析构函数来调用delete [] myArray)。