可能重复:
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();
创建的,那么它会在哪里创建?
答案 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
实例内的堆。