2012-12-06 49 views

回答

5

该成员是否会在堆栈上创建?

是的。

如果是这样,如果MySecondClass通过new创建,会发生什么情况?这个成员是否仍然在堆栈中?

号将与对象的其余部分“上堆”或任何你自由存储区的实施,或其它地方的对象被动态分配的(这可能是某个内存池或别的东西一起被存储, )。

这里值得注意的是,术语“堆栈”和“堆”通常被误用。什么你真的是:

是否有成员自动存储时间是的。

这样做即使封装对象有动态存储时间否— 动态性从某种意义上说是“继承的”。

[C++11: 3.7.5]:成员子对象,基类子对象和数组元素的存储持续时间是其完整对象(1.8)的存储持续时间。

在任何情况下,内存中的实际位置将分别是堆栈和自由存储(“堆”),这并不重要。

另外,main必须int返回类型。

+0

从技术上讲,会员没有自动存储时间。子对象具有其包含对象的存储持续时间。 –

+0

@ R.MartinhoFernandes:奥利?该死。 –

+0

是的,请参阅§3.7.5。我明白你的意思,但这些话不是正确的:/ –

1

是的,成员是在堆栈上创建的。

如果使用“新建”创建MyClass的新对象,资源将分配到堆上。