[英]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
每个成员。 类的大小基于它的成员。 array
是MyClass
的成员,因为MyClass
是在免费商店中分配的,所以是array
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.