Глава 14. Базовые концепции классов__________________ __ ___347

торов может привести к утечкам памяти в производных классах (подробности приведены в главе 20 "Наследование и полиморфизм").

Демонстрация неявных вызовов конструктора и деструктора.

Следующий пример придуман исключительно в целях демонстрации неявных вызовов конструктора и деструктора при создании экземпляра класса. При вызове конструктора или деструктора программа из листинга 14.1 просто печатает соответствующее сообщение.

h03471.jpg

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