分配的C ++对象堆和成员变量

时间:2012-11-24 13:07:58

标签: c++ memory stack heap

class OtherClass
{
    ...
};

class Test
{
    OtherClass otherClass;
};

int main()
{
    Test *pTest = new Test;
}

pTest指向Test类型的对象。是否在堆上分配了otherClass还是在堆栈中?

2 个答案:

答案 0 :(得分:4)

Test *pTest = new Test;

在Freestore(堆)上创建一个Test对象,Test的所有成员也在同一个。
是的。

请注意,从技术上讲,标准从不使用术语堆或堆栈,但是您可以假设这些,因为几乎所有实现都使用它们。

答案 1 :(得分:1)

它在堆上分配。由于pDataMember是类型为OtherClass的数据成员(不是指针!),因此它是为类Test的对象分配的内存的一部分,因此它将位于Test的任何位置。 {1}}找到了对象。

也许你不应该命名非指针pDataMember?这令人困惑。