0

可能重复:
数据成员是否与 C++ 中的对象分配在相同的内存空间中?

如果我声明这样的对象:

void main() {
  MyClass class;
}

它将在堆栈上自动创建。

如果我这样做会发生什么:

class MySecondClass {
  private:
    MyClass class;
}

成员会在堆栈上创建吗?如果是这样,如果MySecondClass是通过创建会发生什么new?这个成员还会在堆栈上吗?

4

2 回答 2

5

成员会在堆栈上创建吗?

是的。

如果是这样,如果MySecondClass是通过创建会发生什么new?这个成员还会在堆栈上吗?

不会。它将与对象的其余部分一起存储,“在堆上”或实现自由存储的任何地方,或者对象被动态分配的任何地方(可能是一些内存池或其他东西)。

这里值得注意的是,术语“堆栈”和“堆”通常被误用。您真正要问的是以下内容:

会员有自动存储期限吗?是的。

即使封装对象具有动态存储持续时间,它也会这样做吗?不——封装对象的动态性在某种意义上是“继承的”

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

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

And, by the way, main must have int return type.

于 2012-12-06T12:12:32.790 回答
1

Yes, member is created on the stack.

If you create a new object of MyClass using "new", resources will be allocated on the heap.

于 2012-12-06T12:13:39.427 回答