1

可能重复:
这种类型的内存是在堆还是栈上分配的?

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

如果我创建一个foo使用 new 运算符的实例,它将在哪里创建?

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

如果 mybar不是原始数据类型,而是创建的另一个对象,例如this->bar=bar();,它将在哪里创建?

4

3 回答 3

1

由于您已经foo在堆中创建了所有成员变量原始/非原始变量也将在堆中。

情况1:

Foo *obj = new Foo();

条在堆上:

案例二:

Foo obj ;

条在堆栈上:

根据标准

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

成员子对象、基类子对象和数组元素的存储时间是它们完整对象的存储时间(1.8)。

于 2012-07-31T11:18:29.010 回答
1

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

成员是内存中类实例块的一部分。因此,无论何时分配该类实例,都会分配整个块,包括成员。

于 2012-07-31T11:23:26.307 回答
0

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

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

于 2012-07-31T11:23:53.967 回答