cpp:stack_unwinding
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
cpp:stack_unwinding [2021/05/25 07:56] – gthanos | cpp:stack_unwinding [2023/05/15 14:13] (current) – gthanos | ||
---|---|---|---|
Line 2: | Line 2: | ||
Κατά την δημιουργία ενός // | Κατά την δημιουργία ενός // | ||
+ | |||
+ | <code cpp Vector.hpp> | ||
+ | #include < | ||
+ | #include < | ||
+ | using namespace std; | ||
+ | |||
+ | class Vector { | ||
+ | int *array; | ||
+ | int size; | ||
+ | | ||
+ | public: | ||
+ | Vector(int length=0); | ||
+ | ~Vector(); | ||
+ | }; | ||
+ | </ | ||
+ | |||
+ | <code cpp Vector.cpp> | ||
+ | #include " | ||
+ | |||
+ | Vector:: | ||
+ | cout << " | ||
+ | size = length; | ||
+ | array = new (nothrow) int[size]; | ||
+ | if(array==NULL) { | ||
+ | cerr << " | ||
+ | exit(-1); | ||
+ | } | ||
+ | for(int i=0; i<size; i++) | ||
+ | array[i] = 0; | ||
+ | } | ||
+ | |||
+ | Vector:: | ||
+ | cout << " | ||
+ | delete [] array; | ||
+ | } | ||
+ | </ | ||
<code cpp StackUnwinding.cpp> | <code cpp StackUnwinding.cpp> | ||
#include < | #include < | ||
#include < | #include < | ||
+ | #include " | ||
+ | |||
using namespace std; | using namespace std; | ||
Line 81: | Line 119: | ||
</ | </ | ||
- | Η εξέλιξη του //program stack// στο παρακάτω πρόγραμμα δίνεται στο παρακάτω διάγραμμα. Παρατηρήστε ότι το exception παράγεται στη συνάρτηση **FFFF()**, αλλά | + | Η εξέλιξη του //program stack// στο παρακάτω πρόγραμμα δίνεται στο παρακάτω διάγραμμα. Παρατηρήστε ότι το exception παράγεται στη συνάρτηση **FFFF()**, αλλά |
- | Από τις εκτυπώσεις στην οθόνη, παρατηρήστε επίσης ότι όσα αντικείμενα έχουν δημιουργηθεί αυτόματα μέσα στο stack στις συναρτήσεις FF(), FFF(), FFFF() καταστρέφονται (με κλήση του αντίστοιχου καταστροφέα) και απελευθεώνεται η μνήμη που έχει δεσμευθεί για αυτά. Η διαδικασία καταστροφής των αντικειμένων γίνεται αυτόματα κατά τη διαδικασία του stack unwinding, ώστε να μην υπάρχουν απώλειες πόρων (memory leaks, περιγραφείς αρχείων ή sockets που παραμένουν ανοιχτά) μετά την διακοπή της εξαίρεσης. | + | Από τις εκτυπώσεις στην οθόνη, παρατηρήστε επίσης ότι όσα αντικείμενα έχουν δημιουργηθεί αυτόματα μέσα στο stack στις συναρτήσεις FF(), FFF(), FFFF() καταστρέφονται (με κλήση του αντίστοιχου καταστροφέα) και απελευθερώνεται η μνήμη που έχει δεσμευθεί για αυτά. Η διαδικασία καταστροφής των αντικειμένων γίνεται αυτόματα κατά τη διαδικασία του stack unwinding, ώστε να μην υπάρχουν απώλειες πόρων (memory leaks, περιγραφείς αρχείων ή sockets που παραμένουν ανοιχτά) μετά την διακοπή της εξαίρεσης. |
{{ : | {{ : | ||
cpp/stack_unwinding.1621929414.txt.gz · Last modified: 2021/05/25 06:56 (external edit)