这些堆栈分配还是堆分配?

时间:2012-07-31 11:17:41

标签: c++ memory-management stack heap

  

可能重复:
  Does this type of memory get allocated on the heap or the stack?

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

如果我使用将在其中创建的新运算符创建foo的实例?

我想,但我的int bar;在哪里创建,堆叠或堆?

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

3 个答案:

答案 0 :(得分:1)

由于您在堆中创建了foo,因此所有成员变量primitive / non-primitive也将在堆中。

案例1:

Foo *obj = new Foo();
栏上有

栏:

案例2:

Foo obj ;
栏中有

栏:

根据标准

  

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

     

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

答案 1 :(得分:1)

了解如何在内存中构造类实例。的 Simple explanation here

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

答案 2 :(得分:0)

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

在这种情况下,bar将在其容器对象中创建,该容器对象是在堆中创建的foo实例。因此bar将转到foo实例内的堆。