Бьерн Страуструп - Язык программирования С++. Главы 5-7 - Удаление
ОГЛАВЛЕНИЕ
Страница 8 из 70
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()Когда начинает выполняться f(), вызывается конструктор char_stack, который размещает массив из 100 символов s1 и массив из 200 символов s2. При возврате из f() память, которая была занята обоими массивами, будет освобождена.
{
char_stack s1(100);
char_stack s2(200);
s1.push('a');
s2.push(s1.pop());
char ch = s2.pop();
cout << ch << '\n';
}
