Глава 14. Базовые концепции классов__________________ __ ___347
торов может привести к утечкам памяти в производных классах (подробности приведены в главе 20 "Наследование и полиморфизм").
Демонстрация неявных вызовов конструктора и деструктора.
Следующий пример придуман исключительно в целях демонстрации неявных вызовов конструктора и деструктора при создании экземпляра класса. При вызове конструктора или деструктора программа из листинга 14.1 просто печатает соответствующее сообщение.
1 ftinclude <iostream.h>
2 // Этот класс просто демонстрирует неявные вызовы
3 // конструктора и деструктора
4 class DEMO
5 {
6 public: »
7 DEMO(){ cout « "constructor" « endl; }
8 virtual ~DEMO(){cout « "destructor" « endl; }
9 };
10:
11: void main()
12: {
13: DEMO staticDemo; // статическое размещение,
// деструктор вызывается при выходе // за пределы области видимости
14: DEMO *dynamicDemo = new DEMO;
// динамическое размещение, // деструктор вызывается // при уничтожении объекта
15: delete dynamicDemo;
16: }
Эта программа компилируется с опцией Win32 Console.
В строках с 4 по 9 определяется класс,, не содержащий ничего, кроме открытых (public) деструктора и конструктора. Обе этих функции объявлены и определены в классе. При создании объекта неявно вызывается конструктор и печатается слово "constructor", а при вызове деструктора, соответственно, слово "destructor".
В строках 12—15 функции main создаются два объекта, один статический, в стеке, а второй в куче (heap) — динамический. В результате. выполнения этого примера на экран будет выведено
constructor constructor destructor destructor