堆上的对象的成员变量是否也自动在堆上?

时间:2009-09-22 16:13:49

标签: c++

class A
{
public:
  A();
  ~A();
  int X;
};

A::A()
{
  X = 5;
  int Y = 4;
}

//..... in another file
A * objectOnHeap = new A();

在这种情况下,由于“objectOnHeap”在堆上,即使它不是特别新的,X也在堆上吗?在这种情况下,Y被分配在堆栈上(当然超出范围),对吗?

我想知道在尝试设想如何将对象存储在内存中时,是否已将我的电线交叉。

4 个答案:

答案 0 :(得分:18)

是。它在堆上。基本上,分配给堆上对象的空间足以容纳其所有成员变量。

答案 1 :(得分:5)

是的,它在堆上。

一些细节: 当你使用“new”运算符时,会发生的事情是编译器在堆上为类分配足够的空间,包括所有成员变量所需的所有空间(也可能是类,在这种情况下,它们的大小需要是计算过,等等。)。

在此之后,在数据成员类上调用构造函数,然后在类本身上调用。

每当你没有在堆上专门分配内存时(通常使用new运算符,或者调用为你执行此操作的函数),内存将在堆栈中分配,就像示例中的变量y一样。 / p>

答案 2 :(得分:3)

我猜你的一半问题仍然没有答案:你问的是Y是否仍然分配在堆栈上,这确实是正确的。

答案 3 :(得分:0)

Y在堆栈上,因为它是在本地创建的; X在堆上。