Διαφορά μεταξύ κατασκευαστή και καταστροφέα

Συγγραφέας: Laura McKinney
Ημερομηνία Δημιουργίας: 1 Απρίλιος 2021
Ημερομηνία Ενημέρωσης: 12 Ενδέχεται 2024
Anonim
Σκυρόδεμα πολυστυρενίου, δοκιμή σύνθεσης. Θρυμματισμένος αφρός, ίνες, χωρίς άμμο
Βίντεο: Σκυρόδεμα πολυστυρενίου, δοκιμή σύνθεσης. Θρυμματισμένος αφρός, ίνες, χωρίς άμμο

Περιεχόμενο


Ο κατασκευαστής και ο καταστροφέας είναι οι λειτουργίες μελών με το ίδιο όνομα με την τάξη τους. Ο πρώην τύπος κατασκευαστής βοηθά στην προετοιμασία ενός αντικειμένου. Αντίθετα, α καταστροφέας είναι διαφορετική από τον κατασκευαστή που διαγράφει τον δημιουργημένο κατασκευαστή όταν δεν είναι χρήσιμος.

Μερικές φορές απαιτείται να αρχικοποιήσετε κάποιο μέρος ενός αντικειμένου πριν να μπορέσει να χρησιμοποιηθεί. Για παράδειγμα, λειτουργούμε στη στοίβα, πριν εκτελέσουμε οποιαδήποτε ενέργεια, το πάνω μέρος της στοίβας πρέπει πάντα να είναι μηδενικό. Αυτό το χαρακτηριστικό της αυτόματης αρχικοποίησης εκτελείται μέσω του 'Constructor'. Όπως, αν ένα αντικείμενο χρειάζεται να εκτελέσει κάποιο κώδικα πριν να καταστραφεί. Για παράδειγμα, εάν ένα αντικείμενο πρέπει να κλείσει ένα αρχείο που είχε ανοίξει, πριν την καταστροφή του. Μπορεί να εκτελεστεί με τη βοήθεια του «Destructor».

Ας δούμε μερικές από τις θεμελιώδεις διαφορές ανάμεσα στον κατασκευαστή και τον καταστροφικό με τη βοήθεια ενός πίνακα σύγκρισης


  1. Συγκριτικό διάγραμμα
  2. Ορισμός
  3. Βασικές διαφορές
  4. συμπέρασμα

Συγκριτικό διάγραμμα:

Βάση σύγκρισηςΚατασκευαστήςΚαταστροφέας
Σκοπός

Διαθέτει τη μνήμη σε ένα αντικείμενο.Ανακατεύει τη μνήμη ενός αντικειμένου.
Δήλωση class_name (αν υπάρχουν επιχειρήματα) {};~ class_name (χωρίς επιχειρήματα) {};
Επιχειρήματα Ο κατασκευαστής δέχεται το επιχείρημα Το Destructor δεν δέχεται κανένα επιχείρημα.
ΚλήσηΟ κατασκευαστής ονομάζεται αυτόματα, ενώ το αντικείμενο δημιουργείται.Ο καταστροφέας ονομάζεται αυτόματα, καθώς το μπλοκ εξέρχεται ή το πρόγραμμα τερματίζεται.
ΕργαζόμενοςΟ Κατασκευαστής επιτρέπει στο αντικείμενο να αρχικοποιήσει κάποια από την αξία του πριν, χρησιμοποιείται.Το Destructor επιτρέπει σε ένα αντικείμενο να εκτελέσει κάποιο κώδικα κατά τη στιγμή της καταστροφής του.
Διαταγή εκτέλεσης

Κατασκευαστής καλούνται διαδοχικά.
Οι καταστροφείς καλούνται με την αντίστροφη σειρά του κατασκευαστή.
Σε αριθμούς Μπορούν να υπάρχουν πολλοί κατασκευαστές σε μια κλάση.Υπάρχει πάντα ένας καταστροφικός παράγοντας στην τάξη.
Αντιγραφή κατασκευαστή Ο κατασκευαστής αντιγράφων επιτρέπει στον κατασκευαστή να δηλώσει και να αρχικοποιήσει ένα αντικείμενο από άλλο αντικείμενο.Δεν υπάρχει τέτοια έννοια.
Πάνω από τη φόρτωση Οι κατασκευαστές μπορούν να υπερφορτωθούν.Ο καταστροφέας δεν μπορεί να υπερφορτωθεί.


Ορισμός κατασκευαστή:

ΕΝΑ κατασκευαστής είναι βασικά μια συνάρτηση μέλους της κλάσης, η οποία προετοιμάζει το αντικείμενο και εκχωρεί μνήμη σε αυτήν. Οι κατασκευαστές μπορούν εύκολα να αναγνωριστούν καθώς δηλώνονται και ορίζονται με το ίδιο όνομα με εκείνο της κλάσης. Ένας κατασκευαστής δεν έχει κάποιον τύπο επιστροφής. έτσι δεν επιστρέφουν τίποτα, ούτε καν «άκυρα». Ένας Κατασκευαστής ορίζεται πάντα στο δημόσιο τμήμα μιας τάξης.

Μπορούν να υπάρχουν πολλοί κατασκευαστές σε μια κλάση. μπορούν να διακριθούν με βάση τον αριθμό και τον τύπο των επιχειρημάτων που έχουν περάσει. Εάν υπάρχουν πολλοί κατασκευαστές σε μια κλάση. πρέπει να οριστεί μαζί με αυτούς ο σιωπηλός κατασκευαστής (κατασκευαστής do-nothing). δεν κάνει τίποτα άλλο, ικανοποιεί τον μεταγλωττιστή.

Οι κατασκευαστές μπορούν επίσης να οριστούν με τα προεπιλεγμένα επιχειρήματα. Ενώ, αρχικοποιούν επίσης το αντικείμενο "δυναμικά". Οι κατασκευαστές δεν μπορούν ούτε να κληρονομηθούν, ούτε να είναι εικονικοί, αλλά μπορούν να επιβαρυνθούν. Δεν μπορούν να αναφερθούν στη διεύθυνσή τους.

Τύποι Κατασκευαστών

Υπάρχουν βασικά τρεις τύποι κατασκευαστών - προεπιλεγμένοι, παραμετροποιημένοι και κατασκευαστές αντιγράφων.

  • Προεπιλεγμένος κατασκευαστής: Είναι κατασκευαστής όπου δεν δίνεται κανένα επιχείρημα στον κατασκευαστή. Ο προεπιλεγμένος κατασκευαστής δεν έχει παράμετρο, αλλά οι τιμές στον προεπιλεγμένο κατασκευαστή μπορούν να περάσουν από προεπιλογή (δυναμικά).
  • Παραμετροποιημένος κατασκευαστής: Αυτός ο τύπος κατασκευαστή λαμβάνει τα επιχειρήματα. μπορούμε να περάσουμε διαφορετικές τιμές στα στοιχεία δεδομένων ως επιχειρήματα.
  • Αντιγραφή κατασκευαστή: Ο κατασκευαστής αντιγράφων διαφέρει από άλλους κατασκευαστές επειδή δέχεται τη διεύθυνση του άλλου αντικειμένου ως επιχείρημα.

Εφαρμογή του κατασκευαστή:

κατηγορίας Const {int a, b; public: Const () // κατασκευαστής χωρίς παράμετρο {a = 0; b = 0; } Const (int c, int d) {// κατασκευαστής με την παράμετρο a = c; c = d; }}. int main () {Const C1; C2 (10,20). // αυτή η δήλωση επικαλείται τον κατασκευαστή}

Όταν δημιουργείται το C1, ένας κατασκευαστής χωρίς καμία παράμετρος εκτελείται, καθώς το C1 δεν περνάει καμία παράμετρο. Ενώ όταν δημιουργείται το C2 ένας κατασκευαστής με την παράμετρο παίρνει εκτελεστεί, καθώς διέρχεται δύο ακέραιοι στον κατασκευαστή.

Ορισμός του καταστροφέα:

ΕΝΑ Καταστροφέας είναι επίσης μια συνιστώσα μέλους μιας κλάσης, η οποία απομεταλλείει τη μνήμη που διατίθεται σε ένα αντικείμενο. Ορίζεται με το ίδιο όνομα με εκείνο μιας κλάσης, που προηγείται από a tilde (~) σύμβολο. Οι καταστροφείς καλούνται πάντοτε με την αντίστροφη σειρά των κατασκευαστών.

Υπάρχει πάντα ένας καταστροφικός παράγοντας σε μια τάξη, καθώς δεν δέχεται κανένα επιχείρημα. Τα τοπικά αντικείμενα καταστρέφονται μόλις ο έλεγχος εκτέλεσης εγκαταλείψει το μπλοκ. από την άλλη πλευρά, τα παγκόσμια αντικείμενα καταστρέφονται όταν τερματίζεται ολόκληρο το πρόγραμμα. Ένας καταστροφέας καλείται σιωπηρά από έναν μεταγλωττιστή. Αν οι κλάσεις κληρονομούνται και μια κλάση προέρχεται από μια γονική κλάση και τόσο η κλάση παιδιού όσο και η γονική τάξη έχουν καταστροφείς. τότε, ο καταστροφικός παράγοντας της παράγωγης τάξης καλείται πρώτα, ακολουθούμενος από τον καταστροφέα της γονικής τάξης.

Εφαρμογή του Destructor:

κατηγορίας Const {int a, b; public: Const (int c, int d) // κατασκευαστής με παράμετρο. {a = c; c = d; cout << "της τιμής a και b είναι" <<>

Όταν δημιουργείται το αντικείμενο C1, ένας κατασκευαστής με δύο παραμέτρους του τύπου ακέραιας καλείται και το μέλος "a, b" αρχικοποιείται και εκδίδεται η τιμή "a, b". Μετά από αυτό ο καταστροφέας παίρνει επίκληση και είναι το "αντικείμενο Γ1 καταστρέφεται".

Ανάγκη καταστροφής

Η δημιουργία του κατασκευαστή καταναλώνει κάποιο χώρο μνήμης, καθώς καταλαμβάνει τελικά μνήμη στα αντικείμενα. Αυτή η κατανεμημένη μνήμη πρέπει να αποσταλεί πριν καταστρέψει τα αντικείμενα για να ελευθερώσει τους πόρους για άλλες εργασίες. Οι καταστροφείς είναι εξαιρετικά χρήσιμοι για τον επιδιωκόμενο σκοπό, ο οποίος καταστρέφει αποτελεσματικά τα αντικείμενα και εκτελεί καθήκοντα καθαρισμού για την απελευθέρωση της μνήμης.

  1. Ο πρωταρχικός σκοπός ενός κατασκευαστή είναι να διαθέσει μνήμη στα αντικείμενα κατά τη δημιουργία τους. Αντιθέτως, ο κύριος σκοπός ενός καταστροφικού είναι να απομακρύνει τη μνήμη του αντικειμένου όταν καταστρέφεται.
  2. Ένας κατασκευαστής επιτρέπεται να δεχτεί τα επιχειρήματα καθώς τα επιχειρήματα μπορούν να χρησιμοποιηθούν για την αρχικοποίηση των μελών δεδομένων της κλάσης. Από την άλλη πλευρά, ένας καταστροφέας δεν δέχεται οποιαδήποτε επιχειρήματα, καθώς η μόνη δουλειά του είναι να απομακρύνει τη μνήμη του αντικειμένου.
  3. Ένας κατασκευαστής ονομάζεται όταν δημιουργείται ένα αντικείμενο. Αντίθετα, ένας καταστροφικός μηχανισμός ονομάζεται όταν τερματίζεται ένα πρόγραμμα ή το πρόγραμμα εξέρχεται από το μπλοκ στο οποίο δημιουργείται ένα αντικείμενο.
  4. Ένας κατασκευαστής γενικά χρησιμοποιείται για την αρχικοποίηση των στοιχείων δεδομένων της κλάσης, ενώ ένας καταστροφέας χρησιμοποιείται για να επιτρέψει στο αντικείμενο να εκτελέσει κάποια ενέργεια πριν καταστραφεί.
  5. Οι κατασκευαστές εκτελούνται με διαδοχική σειρά που σημαίνει ότι αν υπάρχει κλάση που προέρχεται από την κληρονομιά της κλάσης βάσης και δημιουργείται το αντικείμενο της παράγωγης κλάσης, τότε θα καλείται πρώτα ο κατασκευαστής της βασικής κλάσης και στη συνέχεια ο κατασκευαστής της παράγωγης κλάσης. Αντιστρόφως, ο καταστροφικός παράγοντας της παράγωγης κλάσης καλείται πρώτα και στη συνέχεια η βασική κλάση σημαίνει ότι ένας καταστροφικός μηχανισμός εκτελείται με την αντίστροφη σειρά του κατασκευαστή.
  6. Στην τάξη, μπορεί να υπάρχουν πολλοί κατασκευαστές οι οποίοι αναγνωρίζονται από τα αριθμητικά επιχειρήματα που έχουν περάσει, ενώ μπορεί να έχουν μόνο έναν καταστροφικό παράγοντα.
  7. Υπάρχει μια έννοια του κατασκευαστή αντιγράφων που επιτρέπει σε ένα αντικείμενο να αρχίσει από ένα άλλο αντικείμενο ενώ ο καταστροφικός μηχανισμός δεν έχει τέτοια ιδέα.
  8. Οι κατασκευαστές μπορεί να είναι υπερφόρτωση για να εκτελέσουν διαφορετική ενέργεια κάτω από το όνομα του ίδιου κατασκευαστή. Αντίθετα, οι καταστροφείς δεν μπορούν να υπερφορτωθούν.

Συμπέρασμα:

Εκτός από την ομοιότητα, ότι ο κατασκευαστής και ο καταστροφέας είναι η ειδική λειτουργία μέλους μιας τάξης και έχουν το ίδιο όνομα, η ουσιώδης διαφορά μεταξύ των δύο είναι ότι ο «κατασκευαστής» ονομάζεται τη στιγμή της κατανομής της μνήμης και ο «καταστροφικός» καλείται στο χρόνος αντικατάστασης μνήμης αντικειμένων. Τόσο ο κατασκευαστής όσο και ο καταστροφέας καλούνται σιωπηρά από τον μεταγλωττιστή, παρόλο που δεν καθορίζονται στην κλάση.