Różnica między konstruktorem a niszczycielem

Autor: Laura McKinney
Data Utworzenia: 1 Kwiecień 2021
Data Aktualizacji: 14 Móc 2024
Anonim
Różnica między konstruktorem a niszczycielem - Technologia
Różnica między konstruktorem a niszczycielem - Technologia

Zawartość


Konstruktor i destruktor to funkcje składowe o tej samej nazwie co ich klasa. Pierwszy typ konstruktor pomaga w inicjowaniu obiektu. I odwrotnie: burzyciel różni się od konstruktora, który usuwa utworzony konstruktor, gdy nie jest on użyteczny.

Czasami wymagana jest inicjalizacja jakiejś części obiektu, zanim będzie można go wykorzystać. Na przykład działamy na stosie, zanim wykonamy jakąkolwiek akcję, górna część stosu musi zawsze być ustawiona na zero. Ta funkcja automatycznej inicjalizacji jest wykonywana przez „Konstruktora”. Na przykład, jeśli obiekt musi wykonać jakiś kod, zanim zostanie zniszczony. Na przykład, jeśli obiekt musi zamknąć plik, który otworzył, przed zniszczeniem. Można to zrobić za pomocą „Destructor”.

Omówmy niektóre podstawowe różnice między konstruktorem a destruktorem za pomocą tabeli porównawczej

  1. Wykres porównania
  2. Definicja
  3. Kluczowe różnice
  4. Wniosek

Wykres porównania:

Podstawa do porównaniaKonstruktorBurzyciel
Cel, powód

Przydziela pamięć do obiektu.Zwalnia pamięć obiektu.
Deklaracja nazwa_klasy (ewentualne argumenty) {};~ nazwa_klasy (bez argumentów) {};
Argumenty Konstruktor przyjmuje argument Destructor nie przyjmuje żadnych argumentów.
PowołanieKonstruktor jest wywoływany automatycznie podczas tworzenia obiektu.Destructor jest wywoływany automatycznie, gdy blok jest zamykany lub program się kończy.
PracującyKonstruktor umożliwia obiektowi zainicjowanie części jego wartości przed użyciem.Destructor pozwala obiektowi wykonać jakiś kod w momencie jego zniszczenia.
Kolejność wykonania

Konstruktor jest wywoływany w kolejności.
Destruktor wywoływany jest w odwrotnej kolejności niż konstruktor.
W liczbach W klasie może znajdować się wiele konstruktorów.W klasie zawsze jest jeden niszczyciel.
Kopiuj konstruktora Konstruktor kopiowania pozwala konstruktorowi zadeklarować i zainicjować obiekt z innego obiektu.Brak takiej koncepcji.
Ponad ładowanie Konstruktory mogą być przeciążone.Niszczyciel nie może być przeciążony.


Definicja konstruktora:

ZA konstruktor jest w zasadzie funkcją składową klasy, która inicjuje obiekt i przydziela mu pamięć. Konstruktory można łatwo zidentyfikować, ponieważ są zadeklarowane i zdefiniowane z taką samą nazwą jak nazwa klasy. Konstruktor nie ma żadnego typu zwracanego; więc nic nie zwracają, nawet „nieważne”. Konstruktor jest zawsze zdefiniowany w części publicznej klasy.

W klasie może znajdować się wiele konstruktorów; można je rozróżnić na podstawie liczby i rodzaju przekazanych argumentów. Jeśli w klasie jest wiele konstruktorów; wraz z nimi należy zdefiniować konstruktor niejawny (konstruktor „nic nie rób”); nie robi nic, ale spełnia wymagania kompilatora.

Konstruktory można również definiować przy użyciu domyślnych argumentów. Jednocześnie inicjują obiekt „dynamicznie”. Konstruktory nie mogą być dziedziczone ani wirtualne, ale mogą być przeciążone. Nie można ich odsyłać na ich adres.


Rodzaje konstruktorów

Istnieją w zasadzie trzy typy konstruktorów - konstruktory domyślne, sparametryzowane i kopiujące.

  • Domyślny konstruktor: Jest to konstruktor, w którym konstruktor nie podaje żadnego argumentu. Domyślny konstruktor nie ma parametru, ale wartości do domyślnego konstruktora można domyślnie przekazywać (dynamicznie).
  • Sparametryzowany konstruktor: Ten typ konstruktora przyjmuje argumenty; możemy przekazać różne wartości do członków danych jako argumenty.
  • Kopiuj konstruktora: Konstruktor kopiowania różni się od innych typów konstruktorów, ponieważ przyjmuje jako argument adres innego obiektu.

Realizacja konstruktora:

klasa Const {int a, b; public: Const () // konstruktor bez parametru {a = 0; b = 0; } Const (int c, int d) {// konstruktor z parametrem a = c; c = d; }}; int main () {Const C1; C2 (10,20); // ta instrukcja wywołuje konstruktora}

Po utworzeniu C1 wykonywany jest konstruktor bez parametru, ponieważ C1 nie przekazuje żadnego parametru. Podczas tworzenia C2 wykonywany jest konstruktor z parametrem, który przekazuje do konstruktora dwie liczby całkowite.

Definicja niszczyciela:

ZA Burzyciel jest także funkcją składową klasy, która zwalnia pamięć przydzieloną do obiektu. Jest zdefiniowany z taką samą nazwą jak nazwa klasy, poprzedzony przez tylda (~) symbol. Destruktory są zawsze wywoływane w odwrotnej kolejności konstruktorów.

W klasie zawsze jest jeden destruktor, ponieważ nie przyjmuje on żadnych argumentów. Lokalne obiekty są niszczone, gdy tylko kontrola wykonania opuści blok; z drugiej strony obiekty globalne są niszczone po zakończeniu całego programu. Destruktor jest domyślnie wywoływany przez kompilator. Jeśli klasy są dziedziczone, a klasa pochodzi od klasy nadrzędnej, a zarówno klasa podrzędna, jak i klasa nadrzędna mają destruktory; następnie najpierw wywoływany jest destruktor klasy pochodnej, a następnie destruktor klasy nadrzędnej.

Wdrożenie Destructor:

klasa Const {int a, b; public: Const (int c, int d) // konstruktor z parametrem. {a = c; c = d; cout << „wartości aib są„ <<>

Kiedy tworzony jest obiekt C1, wywoływany jest konstruktor z dwoma parametrami typu liczby całkowitej, a element „a, b” jest inicjalizowany, a wartość „a, b” jest edytowana. Następnie wywoływany jest destruktor i „obiekt C1 zostaje zniszczony”.

Need of Destructor

Stworzenie konstruktora zużywa pewną ilość miejsca w pamięci, ponieważ ostatecznie przydziela pamięć obiektom. Tę przydzieloną pamięć należy zwolnić przed zniszczeniem obiektów, aby zwolnić zasoby na inne zadania. Niszczyciele są niezwykle przydatne do zamierzonego celu, który skutecznie niszczy obiekty i wykonuje zadania czyszczenia w celu uwolnienia pamięci.

  1. Podstawowym celem konstruktora jest przydzielenie pamięci do obiektów podczas ich tworzenia. Przeciwnie, głównym celem niszczyciela jest zwolnienie pamięci obiektu, gdy jest on zniszczony.
  2. Konstruktor może akceptować argumenty, ponieważ można ich użyć do zainicjowania elementów danych klasy. Z drugiej strony, destruktor nie przyjmuje żadnych argumentów, ponieważ jego jedyną pracą jest zwolnienie pamięci obiektu.
  3. Konstruktor jest wywoływany podczas tworzenia obiektu. W przeciwieństwie do tego, destruktor jest wywoływany po zakończeniu programu lub wyjściu z bloku, w którym tworzony jest obiekt.
  4. Konstruktor jest zwykle używany do inicjowania elementów danych klasy, natomiast destruktor pozwala obiektowi wykonać pewną akcję przed jego zniszczeniem.
  5. Konstruktory są wykonywane w kolejnej kolejności, co oznacza, że ​​jeśli istnieje klasa pochodna, która dziedziczy klasę podstawową, a obiekt klasy pochodnej jest tworzony, wówczas wywoła najpierw konstruktora klasy podstawowej, a następnie konstruktora klasy pochodnej. I odwrotnie, destruktor klasy pochodnej jest wywoływany najpierw, a następnie klasa bazowa, co oznacza, że ​​destruktor jest wykonywany w odwrotnej kolejności konstruktora.
  6. W klasie może istnieć wiele konstruktorów, które są identyfikowane przez przekazane argumenty liczbowe, podczas gdy może mieć tylko jeden destruktor.
  7. Istnieje koncepcja konstruktora kopiowania, która umożliwia inicjalizację obiektu z innego obiektu, podczas gdy destruktor nie ma takiej koncepcji.
  8. Konstruktory mogą być przeciążone, aby wykonać inną akcję pod nazwą tego samego konstruktora. Wręcz przeciwnie, destruktorów nie można przeciążać.

Wniosek:

Oprócz podobieństwa, że ​​konstruktor i destruktor są specjalną funkcją składową klasy i mają tę samą nazwę, zasadniczą różnicą między nimi jest to, że „konstruktor” jest wywoływany w czasie przydzielania pamięci, a „destruktor” jest wywoływany na czas zwolnienia pamięci obiektów. Zarówno konstruktor, jak i destruktor są domyślnie wywoływane przez kompilator, nawet jeśli nie są zdefiniowane w klasie.