堆分配对象中的堆栈对象在哪里用c ++分配?

时间:2018-09-07 08:27:27

标签: c++

我有两个Class AClass B类。

class A
{
  int width;
  int height;  

};

class B
{
  A obj;

};

我正在尝试创建如下所示的指针

B* myObj = new B();

在这里,myObj在堆中创建。 objwidthheight在哪里创建?

2 个答案:

答案 0 :(得分:10)

指向对象的指针在程序中称为myObj,是在堆栈上创建的。

对象本身B()是在堆上创建的。 widthheight包含在B()占用的内存中,因此也位于堆中。

在Ascii Art中:

Stack --- myObj
            |
Heap      [ B -- A [ Width, Height ] ]

答案 1 :(得分:1)

  

对象可以包含其他对象,称为子对象。子对象可以是成员子对象,基类子对象或数组元素。

[intro.object]

  

子对象和引用成员的存储期限是其完整对象的期限

[basic.stc]

B指向的myObj对象的成员都包含在该B对象中,并且它们都具有相同的(动态)存储持续时间。