2015-10-12 2 views
1
class Stack{ 
public: 
    Stack(int capacity){ 
     data.reserve(capacity); 
     theSize = 0; 
    } 
    ~Stack(){ 
     //What should I put here? 
    } 

Здесь данные являются объектами Vector. Я понимаю, что когда объект Stack выгружается из памяти, в конце концов деструктор данных() будет инициировать и удалять массив в данных. Но мне также нужно удалить память, сохраненную объектом Stack? Как мне это сделать? Спасибо.Что следует помещать в деструктор класса Stack, если Stack реализован с помощью Vector?

+0

Вы просто используете 'std :: vector'? какой тип вы храните в векторе? – NathanOliver

+3

Если вы ничего не «нового», то вам не нужно «удалять» что-либо. – crashmstr

+0

Я использую пользовательский векторный класс , который использует массив для хранения данных. Я удаляю массив в деструкторе Vector. –

ответ

2

Это зависит от того, какой тип данных хранит ваш vector ie data. Если это что-то вроде «vector<int>» или что-то, что не является указателем, тогда вам не нужно определять destructor, так как data вызовет деструктор для каждого из его элементов, когда он вызовет its own destructor.

Однако, если вы используете vector<int*> или подобные вещи, где указатели, проводимые vector (ie data) удерживающие переменные в куче (т.е. они вызываются с помощью new ключевого слова), то вам нужно явно написать Stack деструктор, как: -

~Stack() 
{ 
    for (int i=0;i<data.size();++i) 
    { 
      delete data.at(i); // or delete data[i] 
    } 
} 

Память, хранящаяся в объекте Stack, будет связана с ее типами данных. Если типы данных будут уничтожены, то Stack также будет уничтожен, освободив память, которую он занимал.

 Смежные вопросы

  • Нет связанных вопросов^_^