C++ 成员数组位于何处?

C++ 成员数组位于何处?,c++,C++,给定以下代码: class MyClass { public: char array[10]; }; int main() { MyClass *p = new MyClass; ... } 据我所知,new在堆上分配对象。 但是,数组也是在堆栈上分配的(没有新的操作符) 那么,数组是在堆上分配的(因为对象在堆上)还是在程序堆栈上分配的?WhatMyClass*p=newmyclass真正的意思是,您希望在堆/空闲存储区上分配sizeof(MyClass)字节来存储MyCla

给定以下代码:

class MyClass
{
public:
    char array[10];
};

int main()
{
    MyClass *p = new MyClass;
...
}
据我所知,new在堆上分配对象。 但是,数组也是在堆栈上分配的(没有新的操作符)


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

What
MyClass*p=newmyclass
真正的意思是,您希望在堆/空闲存储区上分配
sizeof(MyClass)
字节来存储
MyClass
的每个成员。类的大小取决于它的成员
array
MyClass
的成员,因此因为
MyClass
是在免费存储上分配的,
array
也是

但是,阵列也是在堆栈上分配的(没有新的运算符)

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

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

class MyClass
{
public:
    char *p_array;
};

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

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


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

@George他们指的是你应该熟悉的免费商店。可能是重复的,或,或,或可能更多