2012-01-31 2 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

+0

Ну, это подразумевается в куче, так как 't' находится в куче, и это член класса. Я знаю, что подобная, но локальная переменная области просто будет сложена. – user1139252

+0

'n' является частью' Matrix', так как ваша печень является частью вас. Если вы находитесь в «куче», ваша печень также находится в «куче». –

ответ

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' имеют * статический *, а не автоматическое хранилище! –

+0

@KerrekSB: Ха-ха, так оно и есть. Исправлена. –

0

Массив n является прямой член класса Matrix, так что любой объект, экземпляр данного типа содержит данные для n непосредственно. В частности, если вы создаете динамический объект в динамически распределенной памяти, тогда будет массив; и если вы создадите автоматический объект, массив будет также находиться в автоматической памяти.