我有两个Class A
和Class B
类。
class A
{
int width;
int height;
};
class B
{
A obj;
};
我正在尝试创建如下所示的指针
B* myObj = new B();
在这里,myObj
在堆中创建。 obj
,width
和height
在哪里创建?
答案 0 :(得分:10)
指向对象的指针在程序中称为myObj
,是在堆栈上创建的。
对象本身B()
是在堆上创建的。 width
和height
包含在B()
占用的内存中,因此也位于堆中。
在Ascii Art中:
Stack --- myObj
|
Heap [ B -- A [ Width, Height ] ]
答案 1 :(得分:1)
对象可以包含其他对象,称为子对象。子对象可以是成员子对象,基类子对象或数组元素。
子对象和引用成员的存储期限是其完整对象的期限
由B
指向的myObj
对象的成员都包含在该B
对象中,并且它们都具有相同的(动态)存储持续时间。