2011-11-05 39 views
0

如果一个类有一个数组作为其成员,并且该类的一个对象被创建,那么该数组对象在哪里存在。我的意思是这个类的对象停留在堆上,所以这个数组对象作为一个对象保留在这个类的对象中,或者它在堆上有一个独立的存在,并且与类的对象有某种联系。堆上有数组对象存在

+1

它完全取决于编程语言。也许你想指定。 –

回答

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)。