在堆栈或堆上创建的类成员?

时间:2012-01-31 00:52:33

标签: c++ class stack 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
}

2 个答案:

答案 0 :(得分: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
    // ...
}

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

答案 1 :(得分:0)

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