new delete operators c with examples
Εξερευνήστε όλα για νέους / Διαγραφή χειριστών στο C ++.
Έχουμε ήδη δει μεταβλητές και στατικούς πίνακες στο C ++ στα προηγούμενα σεμινάρια μας.
Όσον αφορά τη μνήμη που κατανέμεται στις μεταβλητές και τις συστοιχίες, είναι η στατική μνήμη που εκχωρείται από τον μεταγλωττιστή ανάλογα με τον τύπο δεδομένων (σε περίπτωση μεταβλητών) και τις διαστάσεις που παρέχονται για συστοιχίες.
Η μνήμη που εκχωρείται από τον μεταγλωττιστή εκχωρείται στη στοίβα. Αλλά στις περισσότερες περιπτώσεις, ενδέχεται να μην γνωρίζουμε την ακριβή ποσότητα της μνήμης που χρειαζόμαστε.
=> Διαβάστε τη δημοφιλή σειρά εκπαιδευτικών C ++ εδώ.
Αυτό που θα κάναμε είναι να εκχωρήσουμε και να αφαιρέσουμε τη μνήμη όσο θέλουμε και επίσης όπως και όταν το θέλουμε. Αυτό γίνεται με δυναμική κατανομή της μνήμης. Σε αντίθεση με τη στατική κατανομή, η δυναμικά εκχωρημένη μνήμη εκχωρείται στο σωρό.
Η δυναμική κατανομή μνήμης είναι χρήσιμη καθώς μπορούμε να εκχωρήσουμε μνήμη μεταβλητού μεγέθους που δεν μπορούμε να επιτύχουμε με τη μνήμη που έχει εκχωρηθεί από τον μεταγλωττιστή. Έχουμε την ευελιξία να κατανείμουμε τη μνήμη όταν την χρειαζόμαστε και να την εκχωρούμε όταν δεν την χρειαζόμαστε.
Εκτός από αυτές τις χρήσεις, πρέπει επίσης να έχουμε κατά νου ότι σε περίπτωση δυναμικής εκχώρησης μνήμης, είναι ευθύνη του χρήστη να αφαιρέσει τη μνήμη. Εάν ξεχάσουμε να αφαιρέσουμε τη μνήμη, τότε προκαλεί διαρροή μνήμης όπου η μνήμη δεν έχει αφαιρεθεί έως ότου τερματιστεί το πρόγραμμα.
Αυτό μπορεί να έχει ως αποτέλεσμα τη χρήση υπερβολικής μνήμης και συνεπώς προκαλεί σοβαρά σημεία συμφόρησης.
Τι θα μάθετε:
- Δυναμική κατανομή μνήμης
- Ο «νέος» χειριστής
- Χρήση του «νέου» χειριστή με συστοιχίες
- Ο Διαχειριστής Διαγραφής
- συμπέρασμα
- Συνιστώμενη ανάγνωση
Δυναμική κατανομή μνήμης
Η γλώσσα C χρησιμοποιεί συναρτήσεις «malloc», «calloc» και «realloc» για να κατανείμει δυναμικά τη μνήμη. Για να αφαιρέσει τη μνήμη που κατανέμεται δυναμικά με αυτές τις λειτουργίες, χρησιμοποιεί «δωρεάν» κλήση λειτουργίας. Η γλώσσα C ++ υποστηρίζει επίσης αυτές τις λειτουργίες από τη γλώσσα C για εκχώρηση / αφαίρεση μνήμης.
Εκτός από αυτές τις λειτουργίες, το C ++ εισάγει δύο νέους χειριστές που είναι πιο αποτελεσματικοί στη διαχείριση της δυναμικής μνήμης. Αυτοί είναι «νέος» τελεστής για εκχώρηση μνήμης και «διαγραφή» τελεστής για την αφαίρεση μνήμης.
Σε αυτό το σεμινάριο, θα μάθουμε περισσότερα για νέους και διαγράφουμε τελεστές σε γλώσσα C ++.
Ο «νέος» χειριστής
Ο «νέος» χειριστής εκχωρεί μνήμη για μια μεταβλητή ή οποιαδήποτε άλλη οντότητα σε έναν σωρό.
Η γενική σύνταξη του «νέου» χειριστή είναι:
pointer_variable_of_data_type = new data type;
Ο παραπάνω τύπος δεδομένων μπορεί να είναι οποιοσδήποτε έγκυρος τύπος δεδομένων που υποστηρίζεται από το C ++. Μπορεί να είναι ένας ενσωματωμένος τύπος δεδομένων ή οποιοσδήποτε τύπος δεδομένων που καθορίζεται από τον χρήστη, συμπεριλαμβανομένων κλάσεων και δομών.
Για παράδειγμα,
πώς να αφαιρέσετε μια τιμή από έναν πίνακα java
int *ptr = NULL; ptr = new int();
Στο παραπάνω παράδειγμα, έχουμε δηλώσει μια μεταβλητή δείκτη «ptr» σε ακέραιο και την αρχικοποιήσαμε σε μηδέν. Στη συνέχεια, χρησιμοποιώντας το 'νέο' χειριστή εκχωρούμε μνήμη στη μεταβλητή 'ptr'. Εάν η μνήμη είναι διαθέσιμη στο σωρό, η δεύτερη δήλωση θα είναι επιτυχής. Εάν δεν υπάρχει διαθέσιμη μνήμη, τότε ο νέος χειριστής ρίχνει την εξαίρεση 'std :: bad_alloc'.
Ως εκ τούτου, είναι καλύτερη ιδέα να ελέγξετε εάν η μνήμη εκχωρείται επιτυχώς από το νέο χειριστή πριν χρησιμοποιήσετε αυτήν τη μεταβλητή ή οντότητα στο πρόγραμμα.
Μπορούμε επίσης να προετοιμάσουμε τις μεταβλητές χρησιμοποιώντας τον νέο τελεστή ως εξής:
ptr = new int(10);
Στο παραπάνω παράδειγμα, η μεταβλητή δείκτη 'ptr' είναι η εκχωρημένη μνήμη χρησιμοποιώντας τον νέο χειριστή και ταυτόχρονα, η αντιστοιχισμένη τιμή είναι 10. Αυτός είναι ένας ακόμη τρόπος αρχικοποίησης στο C ++.
Χρήση του «νέου» χειριστή με συστοιχίες
Ακόμα μια άλλη χρήση του «νέου» χειριστή είναι η εκχώρηση μνήμης για συστοιχίες. Εδώ καθορίζουμε τον αριθμό των στοιχείων που θα διατεθούν για τον πίνακα.
Παρακάτω παρατίθεται ένα παράδειγμα κατανομής στοιχείων συστοιχίας με τη χρήση του «νέου» χειριστή:
int* myarray = NULL; myarray = new int[10];
Εδώ, ο νέος χειριστής εκχωρεί 10 συνεχή στοιχεία ακέραιου τύπου στη μεταβλητή δείκτη myarray και επιστρέφει το δείκτη στο πρώτο στοιχείο του myarray.
διαφορά μεταξύ c ++ και java
Ο Διαχειριστής Διαγραφής
Η μνήμη που κατανέμεται δυναμικά με τη χρήση του νέου χειριστή πρέπει να απελευθερώνεται ρητά από τον προγραμματιστή. Για το σκοπό αυτό, μας παρέχεται ο τελεστής «διαγραφή».
Η γενική σύνταξη του τελεστή διαγραφής είναι:
delete pointer_variable;
Έτσι μπορούμε να απελευθερώσουμε τη μνήμη που έχει εκχωρηθεί στη μεταβλητή ptr ως εξής:
delete ptr;
Αυτή η δήλωση ελευθερώνει τη μνήμη που έχει εκχωρηθεί στη μεταβλητή 'ptr' πίσω στο σύνολο μνήμης.
Μπορούμε επίσης να χρησιμοποιήσουμε τον τελεστή διαγραφής για να ελευθερώσουμε τη μνήμη που έχει εκχωρηθεί σε πίνακες.
Για παράδειγμα,η μνήμη που διατίθεται στον πίνακα myarray παραπάνω μπορεί να ελευθερωθεί ως εξής:
delete[] myarray;
Σημειώστε τον τελεστή συνδρομής που χρησιμοποιείται με τον τελεστή διαγραφής Αυτό συμβαίνει επειδή, καθώς έχουμε εκχωρήσει τη σειρά στοιχείων, πρέπει να ελευθερώσουμε όλες τις τοποθεσίες.
Αντ 'αυτού, αν είχαμε χρησιμοποιήσει τη δήλωση,
delete myarray;
Γνωρίζουμε ότι το myarray δείχνει το πρώτο στοιχείο του πίνακα, οπότε η παραπάνω δήλωση θα διαγράψει μόνο το πρώτο στοιχείο του πίνακα. Χρησιμοποιώντας το συνδρομητικό '[]', υποδεικνύει ότι η μεταβλητή της οποίας η μνήμη ελευθερώνεται είναι ένας πίνακας και όλη η μνήμη που εκχωρείται πρέπει να ελευθερωθεί.
Το παρακάτω παράδειγμα προγραμματισμού δείχνει τη χρήση νέων και διαγραφών τελεστών στο C ++.
// Example program #include #include using namespace std; int main() { int *ptr = NULL; ptr = new int(); int *var = new int(12); if(!ptr) { cout<<'bad memory allocation'< Παραγωγή:
η μνήμη εκχωρήθηκε με επιτυχία
* ptr = 10
* var = 12
τιμές myarray: 1 2 3 4 5 6 7 8 9 10
Το στιγμιότυπο οθόνης για το ίδιο δίνεται παρακάτω.
Στο παραπάνω παράδειγμα κώδικα, έχουμε δείξει τη χρήση νέων και διαγράψτε τελεστές. Έχουμε χρησιμοποιήσει τον «νέο» χειριστή για να εκχωρήσουμε μνήμη για μια μεταβλητή, πίνακες και επίσης να ξεκινήσουμε μια άλλη μεταβλητή με μια τιμή. Στη συνέχεια, διαγράφουμε αυτές τις οντότητες χρησιμοποιώντας τον τελεστή διαγραφής.
συμπέρασμα
Αυτό αφορά όλους τους νέους τελεστές διαγραφής του C ++ όσον αφορά τους τυπικούς τύπους δεδομένων. Μπορούμε επίσης να χρησιμοποιήσουμε νέους και να διαγράψουμε τελεστές για τύπους δεδομένων που καθορίζονται από το χρήστη ως κλάσεις και δομές.
Θα μάθουμε περισσότερα για τη χρήση αυτών των τελεστών για τη δημιουργία αντικειμένων όταν μαθαίνουμε αντικειμενοστραφή προγραμματισμό χρησιμοποιώντας το C ++.
=> Ρίξτε μια ματιά στον οδηγό για αρχάριους C ++ εδώ.
Συνιστώμενη ανάγνωση
- Unix Shell Script Arithmetic και Boolean Operators Παραδείγματα
- MongoDB Ενημέρωση και Διαγραφή εγγράφου με παραδείγματα
- C ++ χειριστές, τύποι και παραδείγματα
- Χειριστές Python
- Εκμάθηση Python DateTime με παραδείγματα
- Αποκοπή εντολής στο Unix με παραδείγματα
- Ταξινόμηση Bubble σε C ++ με παραδείγματα
- Unix Cat Command Syntax, Επιλογές με παραδείγματα