繁体   English   中英

成员数组在哪里?

[英]Where is the member array located?

给出以下代码:

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; 真正的意思是你想在堆/ free store上分配sizeof(MyClass)字节来存储MyClass每个成员。 类的大小基于它的成员。 arrayMyClass的成员,因为MyClass是在免费商店中分配的,所以是array

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM