Αξιολόγηση πότε πρέπει να καλέσετε έναν κατασκευαστή αντιγράφου . Υπάρχουν τρεις περιπτώσεις : . Κατά τη δημιουργία ενός αντικειμένου από ένα υπάρχον αντικείμενο του ίδιου τύπου , όταν περάσει ένα αντικείμενο με αξία σε μια λειτουργία και όταν μια συνάρτηση επιστρέφει ένα αντικείμενο 2
ξέρετε όταν σας C + + τάξη χρειάζεται ένα κατασκευαστή αντιγράφου . Βράζει κάτω σε αυτό . Εάν τάξη σας έχει δείκτες και εκτελεί δυναμική κατανομή μνήμης , τότε θα πρέπει να δώσει μια σαφή κατασκευαστή αντιγράφου .
Εικόνων 3
Κοιτάξτε ένα παράδειγμα όπου δεν έχετε να καθορίσει ένα κατασκευαστή για ένα C + + class . Κατηγορία X έχει στοίβα μόνο μεταβλητές και καθόλου δείκτες . Μια ρηχή αντίγραφο είναι επαρκής για να αντιγράψετε τις τιμές ενός υπάρχοντος αντικειμένου σε ένα νέο αντικείμενο . Ο compiler μπορεί να το κάνει αυτό αυτόματα , έτσι ώστε να μην χρειάζεται να ορίσετε ένα κατασκευαστή αντιγράφου για την κλάση X :
κατηγορία X { int num
?
Κοινό:
X ( ) : num ( 0 ) { }
~ X ( ) ? }
?
εικόνων 4
Μελέτη ένα παράδειγμα που απαιτεί σαφή ορισμό copy- κατασκευαστή . Όπως μπορείτε να δείτε , το μέγεθος του string, Ν , δεν είναι ένα σκληρό κώδικα τιμής , αλλά καθορίζεται από το χρήστη . Για να δημιουργήσετε Β από το Α ως στην έκφραση "ΚΗ ( A ) , " θα πρέπει να πει ο compiler πόση μνήμη πρέπει να διαθέσετε για το Β. Το μέρος για να γίνει αυτό είναι στην κατασκευαστή αντιγράφου , ως εξής :
κατηγορία Ζ {
int N ?
char * str ?
δημόσια :
Z ( int n ) : N (n ) {
str = νέα char [ Ν]?
}
Z ( Z & άλλα ) {
str = νέα char [ other.GetLen ( ) ] ?
//αντιγραφή δεδομένων από την οδό των "λοιπών" στην οδό της "αυτό"
}
~ Z ( ) {
delete [ ] str ?
}
int GetLen ( ) const {
επιστρέψει Ν ?
} }
?
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα