5.2.5 Удаление.

   


Назад  |  Вперёд

Пользовательские типы чаще имеют, чем не имеют, конструкторы, которые проводят надлежащую инициализацию. Для многих типов требуется и обратная операция - деструктор, гарантирующая правильное удаление объектов этого типа. Деструктор класса X обозначается ~X ("дополнение конструктора"). В частности, для многих классов используется свободная память (см. $$3.2.6), выделяемая конструктором и освобождаемая деструктором. Вот, например, традиционное определение типа стек, из которого для краткости полностью выброшена обработка ошибок:

           class char_stack {
              int size;
              char* top;
              char* s;
           public:
              char_stack(int sz) { top=s=new char[size=sz]; }
              ~char_stack()  { delete[] s; }  // деструктор
              void push(char c) { *top++ = c; }
              void pop()   { return *--top; }
           };

Когда объект типа char_stack выходит из текущей области видимости, вызывается деструктор:

           void f()
           {
             char_stack s1(100);
             char_stack s2(200);
             s1.push('a');
             s2.push(s1.pop());
             char ch = s2.pop();
             cout << ch << '\n';
           }

Когда начинает выполняться f(), вызывается конструктор char_stack, который размещает массив из 100 символов s1 и массив из 200 символов s2. При возврате из f() память, которая была занята обоими массивами, будет освобождена.


Назад  |  Вперёд


OtDiatlovaOU
К началу книги

Оформление и дизайн книги OtDiatlovaOU.
Вся книга, архив.