Бьерн Страуструп - Язык программирования С++. Главы 5-8
Страница 7. Удаление



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() память, которая была занята обоими
 массивами, будет освобождена.

 
« Предыдущая статья   Следующая статья »