Язык программирования C++. Вводный курс


Деструктор класса - часть 2


/p>

};

Конструктор здесь необходим для инициализации членов, представляющих координаты точки. Нужен ли деструктор? Нет. Для объекта класса Point3d не требуется освобождать ресурсы: память выделяется и освобождается компилятором автоматически в начале и в конце его жизни.

В общем случае, если члены класса имеют простые значения, скажем, координаты точки, то деструктор не нужен. Не для каждого класса необходим деструктор, даже если у него есть один или более конструкторов. Основной целью деструктора является освобождения ресурсов, выделенных либо в конструкторе, либо во время жизни объекта, например освобождение замка или памяти, выделенной оператором new.

Но функции деструктора не ограничены только освобождением ресурсов. Он может реализовывать любую операцию, которая по замыслу проектировщика класса должна быть выполнена сразу по окончании использования объекта. Так, широко распространенным приемом для измерения производительности программы является определение класса Timer, в конструкторе которого запускается та или иная форма программного таймера. Деструктор останавливает таймер и выводит результаты замеров. Объект данного класса можно условно определять в критических участках программы, которые мы хотим профилировать, таким образом:

{

   // начало критического участка программы

#ifdef PROFILE

   Timer t;

#endif

   // критический участок

   // t уничтожается автоматически

   // отображается затраченное время ...

}

Чтобы убедиться в том, что мы понимаем поведение деструктора (да и конструктора тоже), разберем следующий пример:

(1)    #include "Account.h"

(2)    Account global( "James Joyce" );

(3)    int main()

(4)    {

(5)       Account local( "Anna Livia Plurabelle", 10000 );

(6)       Account &loc_ref = global;

(7)       Account *pact = 0;

(8)

(9)       {

(10)          Account local_too( "Stephen Hero" );

(11)          pact = new Account( "Stephen Dedalus" );

(12)      }

(13)

(14)      delete pact;

<


Начало  Назад  Вперед



Книжный магазин