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 [2020/05/04 13:34] – gthanos | cpp:stack_unwinding [2023/05/15 14:13] (current) – gthanos | ||
|---|---|---|---|
| Line 3: | Line 3: | ||
| Κατά την δημιουργία ενός // | Κατά την δημιουργία ενός // | ||
| - | <code cpp StackUnwinding.cpp> | + | <code cpp Vector.hpp> |
| #include < | #include < | ||
| #include < | #include < | ||
| Line 16: | Line 16: | ||
| ~Vector(); | ~Vector(); | ||
| }; | }; | ||
| + | </ | ||
| + | |||
| + | <code cpp Vector.cpp> | ||
| + | #include " | ||
| Vector:: | Vector:: | ||
| Line 33: | Line 37: | ||
| delete [] array; | delete [] array; | ||
| } | } | ||
| + | </ | ||
| + | <code cpp StackUnwinding.cpp> | ||
| + | #include < | ||
| + | #include < | ||
| + | #include " | ||
| + | |||
| + | using namespace std; | ||
| // called by FFF() | // called by FFF() | ||
| Line 108: | Line 119: | ||
| </ | </ | ||
| - | H εξέλιξη του //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.1588599243.txt.gz · Last modified: 2020/05/04 12:34 (external edit)
