对象成员的位置

mor*_*s05 0 c++

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

如果我声明一个这样的对象:

void main() {
  MyClass class;
}
Run Code Online (Sandbox Code Playgroud)

它将在堆栈上自动创建.

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

class MySecondClass {
  private:
    MyClass class;
}
Run Code Online (Sandbox Code Playgroud)

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

Lig*_*ica 5

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

是.

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

不会.它将与对象的其余部分一起存储,"在堆上"或实现免费存储的任何位置,或者动态分配对象的任何位置(可能是某些内存池或其他内容).

值得注意的是,术语"堆栈"和"堆"通常被误用.您真正要问的是以下内容:

该会员是否有自动存储时间?是.

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

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

在任何一种情况下,内存中的实际位置将分别是堆栈和免费存储("堆"),这并不重要.

而且,顺便说一句,main 必须有int返回类型.