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


Деструктор класса


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

выделяется память для массива символов и присваивается уникальный номер счету. Можно также представить ситуацию, когда нужно получить монопольный доступ к разделяемой памяти или к критической секции потока. Для этого необходима симметричная операция, обеспечивающая автоматическое освобождение памяти или возврат ресурса по завершении времени жизни объекта, – деструктор. Деструктор – это специальная определяемая пользователем функция-член, которая автоматически вызывается, когда объект выходит из области видимости или когда к указателю на объект применяется операция delete. Имя этой функции образовано из имени класса с предшествующим символом “тильда” (~). Деструктор не возвращает значения и не принимает никаких параметров, а следовательно, не может быть перегружен. Хотя разрешается определять несколько таких функций-членов, лишь одна из них будет применяться ко всем объектам класса. Вот, например, деструктор для нашего класса Account:

class Account {

public:

           Account();

     explicit Account( const char*, double=0.0 );

           Account( const Account& );

     ~Account();

     // ...

private:

           char         *_name;

           unsigned int _acct_nmbr;

           double       _balance;

};

 

inline

Account::~Account()

{

      delete [] _name;

      return_acct_number( _acct_nnmbr );

}

Обратите внимание, что в нашем деструкторе не сбрасываются значения членов:

inline

Account::~Account()

{

      // необходимо

      delete [] _name;

      return_acct_number( _acct_nnmbr );

      // необязательно

      _name = 0;

      _balance = 0.0;

      _acct_nmbr = 0;

}

Делать это необязательно, поскольку отведенная под члены объекта память все равно будет освобождена. Рассмотрим следующий класс:

class Point3d {

public:

   // ...

private:

   float x, y, z;

<


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



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