Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Метод pop() стека


Автор: Timok 28.10.2007, 19:01
сабж: как нужно удалять элементы из стека и нужно ли вообще это делать? т.е. нужно ли делать delete при каждом вызове pop() или достаточно просто сдвигать указатель на след. элемент списка? Если нужно, то правильно ли я это сделал, а то просто я просто не очень хорошо понимаю механизм освобождения памяти...

Код
 // структура элемента списка
struct Item
{
    int data;
    Item* next;
};

// сам стек
class Stack
{
    private:
        Item* current; // Сслыка на текущий элемент

    public:
        class EmptyException {};

        Stack() : current(NULL)
        {
        }

        void push(int d)
        {
            Item* newitem = new Item;
            newitem->data = d;
            newitem->next = current;
            current = newitem;
        }

        int pop()
        {
            if (! current) {
                throw EmptyException();
            }
            // ---------
            // вот в этом куске кода что-то сомневаюсь...           
            int result = current->data; // сохраняем результат
            Item* tmp_pointer = current->next; // сохраняем указатель на след. элемент
            delete current; // удаляем текущий элемент
            current = tmp_pointer; // делаем следующий текущим
            // ---------
            return result; 
        }
};

Автор: zkv 28.10.2007, 21:18
да все вроде законно. Вскрытие покажет  smile 

Автор: griker 29.10.2007, 10:30
Цитата(Timok @  28.10.2007,  19:01 Найти цитируемый пост)
а то просто я просто не очень

Не нервнечай так сильно, чувак

Автор: nanoo 29.10.2007, 11:31
а как на счет STL? 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)