class A
{
public:
A();
~A();
int X;
};
A::A()
{
X = 5;
int Y = 4;
}
//..... in another file
A * objectOnHeap = new A();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,由于"objectOnHeap"在堆上,即使它没有特别新的,X也在堆上吗?在这种情况下,Y在堆栈上分配(当然超出范围),对吗?
我想知道在尝试设想如何将对象存储在内存中时是否已经将我的电线交叉.
是的,它在堆上.
一些细节: 当你使用"new"运算符时,会发生的是编译器在堆上为类分配足够的空间,包括所有成员变量所需的所有空间(也可能是类,在这种情况下它们的大小)需要计算,等等).
在此之后,在数据成员类上调用构造函数,然后在类本身上调用.
每当你没有在堆上专门分配内存时(通常使用new运算符,或调用为你执行此操作的函数),内存将在堆栈中分配,就像示例中的变量y一样.