class A
{
public:
A();
~A();
int X;
};
A::A()
{
X = 5;
int Y = 4;
}
//..... in another file
A * objectOnHeap = new A();
在这种情况下,由于“objectOnHeap”在堆上,即使它不是特别新的,X也在堆上吗?在这种情况下,Y被分配在堆栈上(当然超出范围),对吗?
我想知道在尝试设想如何将对象存储在内存中时,是否已将我的电线交叉。
答案 0 :(得分:18)
是。它在堆上。基本上,分配给堆上对象的空间足以容纳其所有成员变量。
答案 1 :(得分:5)
是的,它在堆上。
一些细节: 当你使用“new”运算符时,会发生的事情是编译器在堆上为类分配足够的空间,包括所有成员变量所需的所有空间(也可能是类,在这种情况下,它们的大小需要是计算过,等等。)。
在此之后,在数据成员类上调用构造函数,然后在类本身上调用。
每当你没有在堆上专门分配内存时(通常使用new运算符,或者调用为你执行此操作的函数),内存将在堆栈中分配,就像示例中的变量y一样。 / p>
答案 2 :(得分:3)
我猜你的一半问题仍然没有答案:你问的是Y是否仍然分配在堆栈上,这确实是正确的。
答案 3 :(得分:0)
Y在堆栈上,因为它是在本地创建的; X在堆上。