需要知道,如果这样的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
}
需要知道,如果这样的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
}
这一切都归结于如何创建父对象。
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
// ...
}
堆和堆栈当然是一个实现细节,但在这种情况下,我认为这是公平的指定。
没有上下文,看起来你的'c1'和'c2'有* static *而不是自动存储,不过! – 2012-01-31 01:13:32
@KerrekSB:哈哈,就这样。固定。 – 2012-01-31 01:14:38
阵列n
是如何将新的因此任何此类型的对象实例都直接包含n
的数据。特别是,如果您在动态分配的内存中创建动态对象,那么该数组将在那里;如果你创建一个自动对象,那么该数组也将驻留在自动内存中。
这不完全取决于您是否使用'new'?你真正的问题是什么? – ildjarn 2012-01-31 00:54:12
那么它是在堆上暗示的,因为't'在堆上,它是类的成员。我知道一个类似的,但局部范围变量将被堆叠。 – user1139252 2012-01-31 00:55:34
'n'是Matrix的一部分,就像你的肝脏是你的一部分。如果你在“堆”上,那么你的肝脏也在“堆”上。 – 2012-01-31 01:01:40