ДеструкторДестру́ктор — специальный метод класса, служащий для деинициализации объекта (например освобождения памяти). Синтаксис деструктора
Деструктор в DelphiДля объявления деструктора в Delphi используется ключевое слово TClassWithDestructor = class
destructor Destroy; override;
end;
В Delphi все классы являются потомками, по крайней мере, класса TObject, поэтому, для корректного освобождения памяти, необходимо перекрывать деструктор, используя директиву В Delphi прямой вызов деструктора используется редко. Вместо него используют метод MyObject.Free; Метод Деструктор в C++ #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;
}
В данном случае при уничтожении объекта выводит в консоль параметр Деструктор в Ruststruct Foo {
i: i32,
}
impl Foo {
fn new(i: i32) -> Foo {
Foo { i }
}
}
impl Drop for Foo {
fn drop(&mut self) {
println!("{}", self.i);
}
}
В блоке let foo = Foo::new(42);
Виртуальный деструкторДеструктор интерфейсов или абстрактных классов обычно делают виртуальным. Такой прием позволяет корректно удалять без утечек памяти, имея лишь указатель на базовый класс[5]. Пусть (на C++) есть тип 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()!!
Однако, если сделать деструктор class Father
{
public:
Father() {}
virtual ~Father() {}
};
class Son : public Father
{
private:
int* buffer;
public:
Son() : Father() { buffer = new int[1024]; }
~Son() { delete[] buffer; }
};
вызов
Ссылки
См. также |