成员数组位于何处

Where is the member array located?

本文关键字:于何处 数组 成员      更新时间:2023-10-16

给定以下代码:

class MyClass
{
public:
    char array[10];
};
int main()
{
    MyClass *p = new MyClass;
...
}

据我了解 - new 在堆上分配对象。而且,数组是在堆栈上分配的(没有新的运算符(。

那么,数组是在堆上分配的(因为对象在堆上(还是在程序堆栈上分配的?

而且,数组是在堆栈上分配的(没有新的运算符(

否,数组是对象的成员。这是其中的一部分。如果对象是动态分配的,那么它的所有部分也是动态分配的。

注意,我说了的所有部分。我们可以调整您的示例:

class MyClass
{
public:
    char *p_array;
};
int main()
{
    char array[10];
    MyClass *p = new MyClass{array};
    // Other code
}

现在,对象包含一个指针。指针是对象的成员,是动态分配的。但是它所持有的地址是具有自动存储持续时间的对象(数组(。

但是,现在数组不再是对象的一部分。这种分离使您心目中的布局成为可能。

> MyClass *p = new MyClass;的真正含义是您希望在堆/免费存储区上分配sizeof(MyClass)字节来存储MyClass的每个成员。类的大小基于其成员。 arrayMyClass的成员,因此MyClass是在免费商店中分配的,所以array也是如此。