这些堆栈分配或堆分配?

可能重复:
这种类型的内存是否被分配到堆或栈上?

class foo{
private:
int bar;
constructors and other members here...
}

如果我使用新操作符创建foo的实例,它将在哪里创建?

堆我猜,但我的int bar;在哪里int bar; 获得创建,堆栈或堆?

如果我的bar不是一个原始的数据类型,但另一个对象创建像这样 - this->bar=bar(); ,它会在哪里创建?


阅读内存中如何构造类实例。 这里简单的解释

成员是内存中类实例块的一部分。 因此,只要分配了类实例,就可以分配整个块,包括成员。


既然你已经在堆中创建了foo ,所有的成员变量primitive / non-primitive也会在堆中。

情况1:

Foo *obj = new Foo();

酒吧在堆上:

案例2:

Foo obj ;

酒吧在堆栈上:

根据标准

3.7.4子对象的持续时间[basic.stc.inherit]

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


任何自动(不是用new创建的)对象/值都是在其容器对象内创建的。 如果它们是独立的,它们将在堆栈中创建。

在这种情况下, bar将在其容器对象内创建,这是在堆中创建的foo实例。 所以bar会去foo实例中的堆。

链接地址: http://www.djcxy.com/p/2345.html

上一篇: Are these stack allocation or heap allocation?

下一篇: Is stack a logical memory area in heap?