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他们指的是你应该熟悉的免费商店。可能是重复的,或,或,或可能更多