Ας δούμε κάποιες από τις βασικές διαφορές μεταξύ κατασκευαστή και καταστροφέα με τη βοήθεια του πίνακα σύγκρισης
Συγκριτικό διάγραμμα:
Βάση σύγκρισης | Κατασκευαστής | Καταστροφέας |
---|---|---|
Σκοπός | Διαθέτει τη μνήμη σε ένα αντικείμενο. | Ανακατεύει τη μνήμη ενός αντικειμένου. |
Δήλωση | 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 ένας κατασκευαστής με την παράμετρο παίρνει εκτελεστεί, καθώς διέρχεται δύο ακέραιοι στον κατασκευαστή.
Ορισμός του καταστροφέα:
Ένας καταστροφέας είναι επίσης μια συνάρτηση μέλος μιας κλάσης, η οποία ανακατεύει τη μνήμη που διατίθεται σε ένα αντικείμενο. Ορίζεται με το ίδιο όνομα με εκείνο μιας κλάσης, που προηγείται από σύμβολο tild (~). Οι καταστροφείς καλούνται πάντοτε με την αντίστροφη σειρά των κατασκευαστών.
Υπάρχει πάντα ένας καταστροφικός παράγοντας σε μια τάξη, καθώς δεν δέχεται κανένα επιχείρημα. Τα τοπικά αντικείμενα καταστρέφονται μόλις ο έλεγχος εκτέλεσης εγκαταλείψει το μπλοκ. από την άλλη πλευρά, τα παγκόσμια αντικείμενα καταστρέφονται όταν τερματίζεται ολόκληρο το πρόγραμμα. Ένας καταστροφέας καλείται σιωπηρά από έναν μεταγλωττιστή. Αν οι κλάσεις κληρονομούνται και μια κλάση προέρχεται από την γονική τάξη και τόσο η τάξη των παιδιών όσο και η τάξη γονέων έχουν καταστροφείς. τότε, ο καταστροφικός παράγοντας της παράγωγης τάξης καλείται πρώτα, ακολουθούμενος από τον καταστροφέα της γονικής τάξης.
Εφαρμογή του Destructor:
κατηγορίας Const {int a, b; public: Const (int c, int d) {// κατασκευαστής με παράμετρο. α = c; c = d; cout << "της τιμής a και b είναι" <Όταν δημιουργείται το αντικείμενο C1, ένας κατασκευαστής με δύο παραμέτρους τύπου ακέραιας καλείται και το μέλος "a, b" αρχικοποιείται πάνω από την τιμή του "a, b" εκτυπώνονται. Μετά από αυτό καταστρέφεται να επικαλεσθεί και να τυπώσει το μήνυμα "αντικείμενο C1 να καταστραφεί".
Βασική διαφορά μεταξύ κατασκευαστών και καταστροφών
- Ο κύριος σκοπός ενός κατασκευαστή είναι να διαθέσει μνήμη στα αντικείμενα όταν δημιουργούνται ενώ ο κύριος σκοπός ενός καταστροφικού είναι να απομακρύνει τη μνήμη του αντικειμένου όταν καταστρέφεται.
- Ένας κατασκευαστής επιτρέπεται να δεχτεί τα επιχειρήματα καθώς τα επιχειρήματα μπορούν να χρησιμοποιηθούν για την αρχικοποίηση των μελών δεδομένων της κλάσης. Ένας καταστροφέας δεν δέχεται οποιαδήποτε επιχειρήματα, καθώς η μόνη δουλειά του είναι να απομακρύνει τη μνήμη του αντικειμένου.
- Ένας κατασκευαστής ονομάζεται όταν δημιουργείται ένα αντικείμενο. Από την άλλη πλευρά, ο καταστροφέας ονομάζεται όταν ένα πρόγραμμα τερματίζεται ή το πρόγραμμα βγαίνει από το μπλοκ στο οποίο δημιουργείται το αντικείμενο.
- Ένας κατασκευαστής γενικά χρησιμοποιείται για την αρχικοποίηση των στοιχείων δεδομένων της κλάσης, ενώ ένας καταστροφικός μηχανισμός χρησιμοποιείται για να επιτρέψει στο αντικείμενο να εκτελέσει κάποια ενέργεια πριν καταστραφεί.
- Οι κατασκευαστές εκτελούνται με διαδοχική σειρά που σημαίνει ότι αν υπάρχει κλάση που προέρχεται από την κληρονομιά της κλάσης βάσης και δημιουργείται το αντικείμενο της παράγωγης κλάσης, τότε θα καλείται πρώτα ο κατασκευαστής της βασικής κλάσης και στη συνέχεια ο κατασκευαστής της παράγωγης κλάσης. Από την άλλη πλευρά, ο καταστροφέας της παράγωγης κλάσης καλείται πρώτα και στη συνέχεια η βασική κλάση σημαίνει ότι ένας καταστροφικός μηχανισμός εκτελείται με αντίστροφη σειρά του κατασκευαστή.
- Στην τάξη, μπορεί να υπάρχουν πολλοί κατασκευαστές οι οποίοι αναγνωρίζονται από τα πεπερασμένα επιχειρήματα. Στην τάξη, υπάρχει μόνο ένας καταστροφικός παράγοντας.
- Υπάρχει μια έννοια του κατασκευαστή αντιγράφων που επιτρέπει σε ένα αντικείμενο να αρχικοποιηθεί από ένα άλλο αντικείμενο, ενώ ο καταστροφέας δεν έχει τέτοια ιδέα.
- Οι κατασκευαστές μπορεί να είναι υπερφόρτωση για να εκτελέσουν διαφορετική ενέργεια κάτω από το όνομα του ίδιου κατασκευαστή, ενώ οι καταστροφείς δεν μπορούν να υπερφορτωθούν.
Συμπέρασμα:
Εκτός από την ομοιότητα, ότι ο κατασκευαστής και ο καταστροφικός παράγοντας είναι η ειδική λειτουργία ενός μέλους μιας κλάσης και έχουν το ίδιο όνομα, η βασική διαφορά μεταξύ των δύο είναι ότι ο «κατασκευαστής» ονομάζεται τη στιγμή της κατανομής της μνήμης και ο «καταστροφικός» καλείται στο χρόνος αντικατάστασης μνήμης αντικειμένων. Και ο κατασκευαστής και ο καταστροφέας καλούνται σιωπηρά από τον μεταγλωττιστή, παρόλο που δεν καθορίζονται στην κλάση.