Wprowadzenie do Destructor w C ++

Jak wszyscy wiemy, C ++ jest językiem programowania obiektowego i jest szeroko stosowany w branży IT do opracowywania oprogramowania, sterowników, wbudowanego oprogramowania układowego i aplikacji klient-serwer. Jest to język średniego poziomu, obejmujący zarówno język wysokiego, jak i niskiego poziomu. Ma pojęcie klas i przedmiotów. W C ++ konstruktory odgrywają ważną rolę w tworzeniu obiektu i inicjowaniu zmiennych instancji, ale co dzieje się z tymi obiektami i zasobami, gdy nie są one już używane lub program się kończy? Odpowiedzialność tę ponoszą Destructors w C ++. Destruktory służą do niszczenia obiektów stworzonych przez Konstruktorów, gdy nie są już potrzebne do zwolnienia pamięci. Są to specjalne funkcje składowe i wywoływane automatycznie przez C ++. kompilator w celu zwolnienia pamięci, gdy w programie nie ma zdefiniowanego przez użytkownika destruktora. Podobnie jak konstruktory, destruktory mają również taką samą nazwę jak klasa poprzedzona znakiem tyldy (~). Ale destruktor nie przyjmuje żadnych argumentów / parametrów i niczego nie zwraca, tzn. Nie ma żadnego typu zwracanego.

Niszczycieli nigdy nie można przeciążać jak konstruktorów w klasie. Poniżej podano niektóre sytuacje, w których kompresor jest wywoływany automatycznie przez kompilator:

  • Gdy wywoływany jest operator usuwania.
  • Po zakończeniu wykonywania programu.
  • Kiedy kończy się blok / zakres zmiennych lokalnych.

Programista może zdefiniować destruktor znany jako konstruktor zaprojektowany przez użytkownika. Destruktor może być zadeklarowany jako Wirtualny lub czysty wirtualny, ale nie może być zadeklarowany jako const, volatile, const volatile lub static.

Jak działa Destructor w C ++?

Przy pracy destruktora należy pamiętać o poniższych punktach:

  • Niszczyciele obiektów klasy są wywoływane najpierw przed wywołaniem destruktora członków i baz. Destruktory nie-wirtualnej klasy bazowej są wywoływane przed destruktorami wirtualnej klasy bazowej.
  • Przed klasami podstawowymi wywoływany jest destruktor elementów niestatycznych. Destruktory zarówno wirtualnych, jak i nie-wirtualnych klas bazowych są wywoływane w odwrotnej kolejności od deklaracji.
  • Domniemane niszczyciele są wywoływane automatycznie przez kompilator C ++, gdy obiekt wykracza poza zakres lub kończy się wykonywanie programu dla zewnętrznych i statycznych obiektów w programie. Destruktory są wywoływane w celu zniszczenia obiektów utworzonych przez nowe słowo kluczowe.
  • W przypadku zarówno domyślnych, jak i zdefiniowanych przez użytkownika destruktorów, kompilator najpierw wykonuje ciało destruktora, a następnie wywołuje destruktory wszystkich niestatycznych klas niestatycznych, a następnie wywołuje destruktory nie-wirtualnych i wirtualnych klas bazowych w odwrotnej kolejności ich konstrukcja.

Składnia Destructor

Destruktory w C ++ są poprzedzone znakiem tyldy (~). Poniżej wymieniona jest podstawowa składnia destruktora:

Składnia:

Class class_name()
(


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

W składni „nazwa_klasy” to nazwa klasy, aw metodzie głównej zdefiniowano zarówno konstruktor, jak i destruktor o tej samej nazwie klasy. Destructor nie ma żadnych parametrów ani typu zwrotu.

Przykłady Destructor w C ++

Poniżej wspomniany jest przykład Destructor w C ++:

Przykład # 1: Program z niszczycielem zdefiniowanym przez użytkownika

Kod:

#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;
)

Wynik:

W powyższym przykładzie „Przykład1” to nazwa klasy, a „ex” to obiekt utworzony z tej klasy. Najpierw wywoływany jest konstruktor, więc drukowany jest tekst napisany w konstruktorze, a następnie metoda wyświetlania nazywa się ana, w końcu wywoływany jest destruktor po zakończeniu całego programu.

Przykład # 2: Program z Virtual Destructor

Kod:

#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;
)

Wynik:

Dobrą praktyką jest uczynienie destruktora klasy podstawowej wirtualnym, ponieważ zapewnia to prawidłowe zniszczenie obiektu klasy pochodnej. Ilekroć używana jest klasa wirtualna, należy natychmiast dodać wirtualny destruktor, aby zapobiec przyszłym nieoczekiwanym wynikom.

Zalety Destructor w C ++

  • Daje to ostatnią szansę na oczyszczenie zasobów, które nie są używane, w celu zwolnienia pamięci zajmowanej przez nieużywane obiekty, takie jak usuwanie obiektów dynamicznych, zamykanie uchwytów systemowych, używane pliki.
  • Z powodu dużej ilości zasobów zajmujących miejsce i nieużywających się w komputerze, destruktor zawsze ma dobry obraz, aby zmniejszyć ryzyko wycieku pamięci, niszcząc te nieużywane rzeczy.
  • Chociaż C ++ ma mechanizm Garbage Collection, ale automatyczne wywoływanie destruktora, niezależnie od tego, czy programista go wywoła, czy nie, aby zwolnić miejsce, zapobiega użytkownikowi w wielu najgorszych sytuacjach w przyszłości.

Punkty do podsumowania na temat Niszczyciela

  • Niszczyciele służą do niszczenia niewykorzystanych zasobów klasy.
  • Destruktory mają taką samą nazwę jak nazwa klasy poprzedzona znakiem (~).
  • W przeciwieństwie do konstruktorów, nie może być parametru niszczyciela.
  • Nie ma typu zwrotu destruktora.
  • Jeśli użytkownik sam nie zdefiniuje destruktora w programie, kompilator automatycznie konstruuje dla niego jeden destruktor.
  • W jednej klasie nie może być więcej niż jeden destruktor.

Wniosek

Powyższy opis destruktorów jasno definiuje użycie i implementację destruktora w programie C ++. Chociaż koncepcja destruktora nie jest złożona, bardzo ważne jest, aby zrozumieć przed wdrożeniem w programie, ponieważ niewłaściwe użycie destruktora może prowadzić do nieoczekiwanych rezultatów.

Polecany artykuł

To jest przewodnik po Destructor w C ++. Tutaj omawiamy wprowadzenie do Destructor w C ++ i działanie Destructor wraz z zaletami. Możesz także przejrzeć nasze inne sugerowane artykuły, aby dowiedzieć się więcej -

  1. Destructor in Java (Przykłady)
  2. Wprowadzenie do przesłonięcia w C ++
  3. Wzory w C ++ (przykłady)
  4. Typy konstruktorów w C ++
  5. Destructor in Python (Składnia, Przykłady)