如果我声明这样的对象:
void main() {
MyClass class;
}
它将在堆栈上自动创建。
如果我这样做会发生什么:
class MySecondClass {
private:
MyClass class;
}
成员会在堆栈上创建吗?如果是这样,如果MySecondClass
是通过创建会发生什么new
?这个成员还会在堆栈上吗?
如果我声明这样的对象:
void main() {
MyClass class;
}
它将在堆栈上自动创建。
如果我这样做会发生什么:
class MySecondClass {
private:
MyClass class;
}
成员会在堆栈上创建吗?如果是这样,如果MySecondClass
是通过创建会发生什么new
?这个成员还会在堆栈上吗?
成员会在堆栈上创建吗?
是的。
如果是这样,如果
MySecondClass
是通过创建会发生什么new
?这个成员还会在堆栈上吗?
不会。它将与对象的其余部分一起存储,“在堆上”或实现自由存储的任何地方,或者对象被动态分配的任何地方(可能是一些内存池或其他东西)。
这里值得注意的是,术语“堆栈”和“堆”通常被误用。您真正要问的是以下内容:
会员有自动存储期限吗?是的。
即使封装对象具有动态存储持续时间,它也会这样做吗?不——封装对象的动态性在某种意义上是“继承的” 。
[C++11: 3.7.5]:
成员子对象、基类子对象和数组元素的存储时间是它们完整对象的存储时间(1.8)。
在任何一种情况下,内存中的实际位置将分别是堆栈和空闲存储(“堆”),这并不重要。
And, by the way, main
must have int
return type.
Yes, member is created on the stack.
If you create a new object of MyClass using "new", resources will be allocated on the heap.