2012-01-31 54 views
-2

需要知道,如果这样的3D矩阵将在堆或堆和如果被创建其上的堆,并正确地初始化缺省值(memset的)在堆栈或堆上创建的类成员?

class Matrix { 
    protected: 
     int n[9000][420]; // is stack or heap if VVV is pointer? 
}; 

void main() 
{ 
     Matrix* t = new Matrix(); // created on heap 
} 
+3

这不完全取决于您是否使用'new'?你真正的问题是什么? – ildjarn 2012-01-31 00:54:12

+0

那么它是在堆上暗示的,因为't'在堆上,它是类的成员。我知道一个类似的,但局部范围变量将被堆叠。 – user1139252 2012-01-31 00:55:34

+0

'n'是Matrix的一部分,就像你的肝脏是你的一部分。如果你在“堆”上,那么你的肝脏也在“堆”上。 – 2012-01-31 01:01:40

回答

5

这一切都归结于如何创建父对象。

MyClass { 
    int n[10]; 
}; 

int main(...) { 
    MyClass *c1 = new MyClass; // everything allocated on heap, 
           // but c1 itself is automatic 
    MyClass c2;    // everything allocated on stack 
    // ... 
} 

堆和堆栈当然是一个实现细节,但在这种情况下,我认为这是公平的指定。

+0

没有上下文,看起来你的'c1'和'c2'有* static *而不是自动存储,不过! – 2012-01-31 01:13:32

+0

@KerrekSB:哈哈,就这样。固定。 – 2012-01-31 01:14:38

0

阵列n是如何将新的因此任何此类型的对象实例都直接包含n的数据。特别是,如果您在动态分配的内存中创建动态对象,那么该数组将在那里;如果你创建一个自动对象,那么该数组也将驻留在自动内存中。