Деструктор

Деструктор

Дестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти).

Содержание

Деструктор в Delphi

Для объявления деструктора в Delphi используется ключевое слово destructor. Имя деструктора может быть любым, но рекомендуется всегда называть деструктор Destroy.

  TClassWithDestructor = class
    destructor Destroy; override;
  end;

В Delphi все классы являются потомками, по крайней мере, класса TObject, поэтому, для корректного освобождения памяти, необходимо перекрывать деструктор, используя директиву override.

В Delphi прямой вызов деструктора используется редко. Вместо него используют метод Free.

 MyObject.Free;

Метод Free вначале проверяет существует ли уничтожаемый объект, а затем вызывает деструктор. Этот прием позволяет избегать ошибок, возникающих при обращении к несуществующему объекту.

Деструктор в С++

    #include <iostream>
    using namespace std;
 
    class NameOfClass
    {
        private:
             int a;
        public:
             NameOfClass(int m);
             ~NameOfClass();
    };
 
    NameOfClass::~NameOfClass()
    {
        cout << this->a << endl;
    }
 
    NameOfClass::NameOfClass(int m)
    {
        a = m;
    }

~NameOfClass() — деструктор, имеет имя ~NameOfClass, не имеет входных параметров.
В данном случае при уничтожении объекта выводит в консоль параметр a.

Виртуальный деструктор

Практически всегда деструктор делается виртуальным. Делается это для того, чтобы корректно (без утечек памяти) уничтожались объекты не только заданного класса, а и любого производного от него. Например: в игре уровни, звуки и спрайты могут создаваться загрузчиком, а уничтожаться — менеджером памяти, для которого нет разницы между уровнем и спрайтом.

Пусть (на C++) есть тип Father и порождённый от него тип Son:

class Father
{
public:
  Father() {}
  ~Father() {} 
};
 
class Son : public Father
{
public:
  int* buffer;
  Son() : Father() { buffer = new int[1024]; }
  ~Son() { delete[] buffer; }
};

Нижеприведённый код является некорректным и приводит к утечке памяти.

Father* object = new Son(); // вызывается Son()
delete object; // вызывается ~Father()!!

Однако, если сделать деструктор Father виртуальным:

class Father
{
public:
  Father() {}
  virtual ~Father() {} 
};
 
class Son : public Father
{
private:
  int* buffer;
public:
  Son() : Father() { buffer = new int[1024]; }
  ~Son() { delete[] buffer; }
};

вызов delete object; приведет к последовательному вызову деструкторов ~Son и ~Father.

В Delphi все классы порождаются от TObject, деструктор которого является виртуальным, поэтому нет необходимости самому объявлять деструкторы любых объектов виртуальными.


См. также


Wikimedia Foundation. 2010.

Игры ⚽ Нужна курсовая?

Полезное


Смотреть что такое "Деструктор" в других словарях:

  • ДЕСТРУКТОР — (редуцент) организм, в ходе своей жизнедеятельности превращающий органические остатки в неорганические вещества, пригодные для использования продуцентами. Являются гетеротрофами. Преимущественно это бактерии и грибы. Экологический словарь, 2001 …   Экологический словарь

  • деструктор — Устройство для разрушения структуры частиц твёрдых веществ [Терминологический словарь по строительству на 12 языках (ВНИИИС Госстроя СССР)] Тематики строит. машины, оборуд., инструмент прочие EN destructor DE Zerkleinerungsanlage FR destructeur …   Справочник технического переводчика

  • ДЕСТРУКТОР — устройство для разрушения структуры частиц твёрдых веществ (Болгарский язык; Български) деструктор; разрушител (Чешский язык; Čeština) mělnič; drtič (Немецкий язык; Deutsch) Zerkleinerungsanlage (Венгерский язык; Magyar) hulladékörlő (Монгольский …   Строительный словарь

  • Деструктор (программирование) — Деструктор специальный метод класса, служащий для деинициализации объекта (например освобождения памяти). Содержание 1 Деструктор в Delphi 2 Деструктор в С++ …   Википедия

  • Деструктор класса — Деструктор специальный метод класса, служащий для деинициализации объекта (например освобождения памяти). Содержание 1 Деструктор в Delphi 2 Деструктор в С++ 3 Виртуальный деструктор …   Википедия

  • деструктор — (лат. destruo, destnictum разрушать, уничтожать; син. мусоросжигатель) сооружение или техническое устройство, предназначенное для уничтожения твердых органических отходов путем сжигания …   Большой медицинский словарь

  • деструктор — а, ч. Споруда для спалювання твердих відходів …   Український тлумачний словник

  • деструктор — іменник чоловічого роду …   Орфографічний словник української мови

  • Destructor (Деструктор) — «Destructor» («Деструктор») торпедная канонерская лодка (Испания) Тип: торпедная канонерская лодка (Испания). Водоизмещение: 465 тонн. Размеры: 58 м х 7,6 м х 2 м. Силовая установка: двухвальная, паровые машины тройного расширения. Максимальная… …   Энциклопедия кораблей

  • C++ — У этого термина существуют и другие значения, см. C. См. также: Си (язык программирования) C++ Семантика: мультипарадигмальный: объектно ориентированное, обобщённое, процедурное, метапрограммирование Тип исполнения: компилируемый Появился в …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»