User Tools

Site Tools


cpp:exception

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revisionBoth sides next revision
cpp:exception [2018/05/18 14:32] – [Κληρονομικότητα] gthanoscpp:exception [2018/05/18 14:54] – [Stack Unwinding] gthanos
Line 328: Line 328:
  
 ===== Stack Unwinding ===== ===== Stack Unwinding =====
 +
 +Κατά την δημιουργία ενός //exception// μέσα σε μία συνάρτηση ή σε ένα κατασκευαστή δεν είναι απαραίτητο ότι η διαχείριση του //exception// θα πρέπει να γίνει στην ίδια τη συνάρτηση ή τον καστασκευαστή. Η διαδικασία όνομάζεται //stack unwinding// και το παράδειγμα που ακολουθεί είναι εξαρειτικά διαφωτιστικό για το πως διαμορφώνεται το stack μετά από την διαχείριση μίας εξαίρεσης σε υψηλότερο επίπεδο.
 +
 +<code cpp StackUnwinding.cpp>
 +#include <iostream>
 +// called by FFF()
 +void FFFF() {
 +  std::cout << "Start FFFF\n";
 +  std::cout << "FFFF throwing int literal exception\n";
 +  throw 100;
 +  std::cout << "End FFFF\n";
 + 
 +}
 +// called by FF() 
 +void FFF() {
 +  std::cout << "Start FFF\n";
 +  FFFF();
 +  std::cout << "End FFF\n";
 +}
 +// called by F()
 +void FF() {
 +  std::cout << "Start FF\n";
 +  try {
 +    FFF();
 +  } catch(char) { 
 +    std::cerr << "FF caught double exception\n";
 +  }
 +  std::cout << "End FF\n";
 +}
 +// called by main()
 +void F() {
 +  std::cout << "Start F\n";
 +  try {
 +    FF();
 +  } catch (int) {
 +     std::cerr << "F caught int exception\n";
 +  } catch (char) {
 +     std::cerr << "F caught double exception\n";
 +  }
 +  std::cout << "End F\n";
 +}
 + 
 +int main() {
 +  std::cout << "Start main\n";
 +  try {
 +    F();
 +  } catch (int) {
 +    std::cerr << "main caught int exception\n";
 +  }
 +  std::cout << "End main\n"; 
 +  return 0;
 +}
 +</code>
  
  
cpp/exception.txt · Last modified: 2023/05/15 14:01 by gthanos