Въведение в Destructor в C ++

Както всички знаем, C ++ е обектно-ориентиран език за програмиране и се използва широко в ИТ индустриите за разработване на софтуер, драйвери, вграден фърмуер и клиент-сървърни приложения. Това е език на средно ниво, капсулиращ характеристики както на високо ниво, така и на ниско ниво. Има концепция за класове и обекти. В C ++ конструкторите играят важна роля за създаването на обект и инициализирането на променливите на екземпляра, но какво се случва с тези обекти и ресурси, след като те вече не се използват или програмата завършва? Тази отговорност се поема от Destructors в C ++. Разрушителите се използват за унищожаване на обектите, създадени от Конструкторите, когато те вече не са необходими за освобождаване на паметта. Те са специални функции на членове и се извикват автоматично от C ++. компилатор за освобождаване на паметта, когато няма дефиниран от потребителя деструктор в програмата. Подобно на конструкторите, деструкторите също имат същото име като клас, предшествано от знак tilde (~). Но destructor не приема никакви аргументи / параметри и не връща нищо, т.е. те нямат никакъв тип връщане.

Деструкторите никога не могат да бъдат претоварени като конструктори в клас. По-долу са дадени някои от ситуациите, при които деструкторът се извиква автоматично от компилатора:

  • Когато се извика оператор за изтриване.
  • Когато изпълнението на програмата приключи.
  • Когато блокът / обхватът на локалните променливи приключи.

Програмист може да деструктор, известен като конструктор, проектиран от потребителя. Разрушителят може да бъде деклариран като виртуален или чист виртуален, но не може да бъде обявен за const, променлив, const летлив или статичен.

Как работи Destructor в C ++?

За работа на деструктор трябва да се имат предвид посочените по-долу точки:

  • Деструкторите на класовите обекти се извикват първо, преди да извикат деструктора на членове и бази. Деструкторите на невиртуалния основен клас се извикват пред деструкторите на виртуалния базов клас.
  • Преди базовите класове се извиква разрушителят на нестатичните членове. Деструкторите както на виртуални, така и на невиртуални базови класове се извикват в обратен ред на декларацията си.
  • Неизразните деструктори се извикват автоматично от компилатора C ++, когато обект излезе извън обхвата или изпълнението на програмата се прекрати за външни и статични обекти в програмата. Деструкторите се призовават да унищожат обектите, създадени от нова ключова дума.
  • В случая както на неявни, така и на дефинирани от потребителя деструктори компилаторът първо изпълнява тялото на деструктора и след това извиква деструктори от всички нестатични не-вариантен клас и след това извиква деструкторите на не-виртуални и виртуални базови класове в обратен ред на тяхното изграждане.

Синтаксис на Destructor

Разрушителите в C ++ се предхождат от знака tilde (~). По-долу е споменат основният синтаксис на деструктора:

Синтаксис:

Class class_name()
(


public:
class_name(); // Constructor
~class_name(); // destructor
)
)

В синтаксиса 'class_name' е името на класа и в основния метод се дефинират както конструкторът, така и деструкторът със същото име на класа. Destructor нито има параметри, нито тип връщане.

Примери за Destructor в C ++

По-долу се споменава примера с Destructor в C ++:

Пример №1: Програма с дефиниран от потребителя деструктор

Код:

#include
using namespace std;
class Example1( //class
public:
Example1()( // constructor cout << “Hello I am inside a constructor” << endl;
)
~Example1()( //destructor
cout << “Hello I am inside a destructor” << endl;
)
void display()
(
cout << “Hello this is a display method” << endl
)
);
int main()
(
Example1 ex; //object created
ex.display(); // display method called return 0;
)

изход:

В горния пример 'Example1' е името на класа, а 'ex' е обектът, създаден от този клас. Първо се извиква конструкторът, така че текстът, написан в конструктора, се отпечатва, след това методът на показване се нарича ana, накрая се извиква разрушителят след цялото изпълнение на програмата.

Пример №2: Програма с виртуален разрушител

Код:

#include
using namespace std;
class b1 ( //base class
public:
b1() // constructor of base class
(
cout << “Hello this is base constructor” << endl;
)
~virtual b1() // destructor of base class
(
cout << “Hello this is base destructor” << endl;
)
);
class b2: public b1( // derived class of base class (b1) public:
b2() //constructor of derived cass
(
cout << “Hello this is derived constructor” << endl;
)
~ b2() // destructor of derived class
(
cout << “Hello this is derived destructor” << endl;
)
);
int main(void) //main method
(
b2 *der = new b2();
b1 *bas = der;
delete der;
getchar();
return 0;
)

изход:

Добра практика е деструкторът на базовия клас да бъде виртуален, тъй като това гарантира, че обектът на извлечения клас е унищожен правилно. Всеки път, когато се използва виртуален клас, трябва незабавно да се добави виртуален деструктор, за да се предотвратят бъдещи неочаквани резултати.

Предимства на Destructor в C ++

  • Той дава последния шанс за почистване на ресурсите, които не се използват за освобождаване на паметта, заета от неизползвани обекти, като изтриване на динамични обекти, затваряне на системните дръжки, използвани файлове.
  • Поради много ресурси, които заемат място и не се използват в компютъра, деструкторът винаги идва с добро изображение, за да намали шансовете за изтичане на паметта, като унищожи тези неизползвани неща.
  • Въпреки че C ++ има механизма за събиране на боклука, но автоматично извикване на деструктора независимо дали програмистът го извиква или не, за да освободи място, не позволява на потребителя да възникне много лоши ситуации в бъдеще.

Точки, които да обобщим за Destructor

  • Разрушителите се използват за унищожаване на неизползваните ресурси на даден клас.
  • Деструкторите имат същото име като името на класа, предхождащо със знак (~).
  • За разлика от Constructors, не може да има параметър на деструктора.
  • Няма връщащ тип деструктор.
  • Ако потребителят не определи деструктора сам в програма, компилаторът автоматично конструира един разрушител за него.
  • Не може да има повече от един разрушител в един клас.

заключение

Горното описание на деструктори ясно определя използването и внедряването на деструктора в програма C ++. Въпреки че концепцията за деструктора не е сложна, все пак е много важно да се разбере преди прилагането в програмата, тъй като неправилното използване на деструктора може да доведе до неочаквани резултати.

Препоръчителен член

Това е ръководство за Destructor в C ++. Тук обсъждаме Въведение в Destructor в C ++ и Работа на Destructor заедно с Предимства. Можете също да прегледате и другите ни предложени статии, за да научите повече -

  1. Destructor в Java (примери)
  2. Въведение в преодоляването на C ++
  3. Модели в C ++ (Примери)
  4. Видове конструктор в C ++
  5. Destructor в Python (синтаксис, примери)