可能重复:
Are data members allocated in the same memory space as their objects in C++?
如果我声明一个这样的对象:
void main() {
MyClass class;
}
它将在堆栈上自动创建。
如果我这样做会发生什么:
class MySecondClass {
private:
MyClass class;
}
是否会在堆栈上创建成员?如果是这样,如果MySecondClass
是通过new
创建的,会发生什么?这个成员还会在堆叠中吗?
答案 0 :(得分:5)
是否会在堆栈上创建成员?
是
如果是这样,如果
MySecondClass
是通过new
创建的,会发生什么?这个成员还会在堆叠中吗?
没有。它将与对象的其余部分一起存储,“在堆上”或实现免费存储的任何位置,或者动态分配对象的任何位置(可能是某些内存池或其他内容)。
值得注意的是,术语“堆栈”和“堆”通常被误用。您真正询问的内容如下:
该成员是否有自动存储时间?是。
即使封装对象具有动态存储持续时间,它也会这样做吗?否 - 封装对象的动态性是感觉,“继承”。
[C++11: 3.7.5]:
成员子对象,基类子对象和数组元素的存储持续时间是其完整对象的存储持续时间(1.8)。
在任何一种情况下,内存中的实际位置将分别是堆栈和免费存储(“堆”),这并不重要。
顺便说一句,main
必须拥有int
返回类型。
答案 1 :(得分:1)
是的,成员是在堆栈上创建的。
如果使用“new”创建MyClass的新对象,将在堆上分配资源。