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/21 01:49] – [Διαχείριση μίας εξαίρεσης και παραγωγή μίας νέας εξαίρεσης κατά την διαχείριση] gthanoscpp:exception [2018/05/21 02:00] – [Ένα 2ο παράδειγμα] gthanos
Line 537: Line 537:
  
 Το //exception std::bad_alloc// είναι απόγονος της κλάσης //std::exception// επομένως ο παραπάνω κώδικας θα πρέπει να δουλεύει σωστά και μετά την αλλαγή. Εν τούτοις παρατηρούμε ότι το πρόγραμμα αποτυγχάνει με ένα μήνυμα της μορφής Το //exception std::bad_alloc// είναι απόγονος της κλάσης //std::exception// επομένως ο παραπάνω κώδικας θα πρέπει να δουλεύει σωστά και μετά την αλλαγή. Εν τούτοις παρατηρούμε ότι το πρόγραμμα αποτυγχάνει με ένα μήνυμα της μορφής
-<code +<code
 +$> ./PPMImageSample 3x2.ppm  
 +std::bad_alloc occured! 
 +terminate called after throwing an instance of 'std::exception' 
 +  what():  std::exception 
 +Aborted (core dumped) 
 +</code> 
 + 
 +Ο λόγος που συμβαίνει το παραπάνω είναι ότι το όταν το //catch block// παράγει και πάλι το //exception//, παράγει ένα αντικείμενο της κλάσης //std::exception// αποκόπτοντας το τμήμα του αντικειμένου που αφορά την απόγονο κλάση //std::bad_alloc//. Στη συνέχεια ένα τέτοιο αντικείμενο δεν μπορεί να το "πιάσει" το //catch block// της συνάρτησης //main//. Εάν πρέπει να παράγεται το ίδιο //exception// πράγμα που ήταν αρχικά επιθυμητό ο κώδικας στο //catch block// του κατασκευαστή θα πρέπει να γραφεί όπως παρακάτω, ώστε να παράγει ως //exception// το ίδιο αντικείμενο που έγινε //catch//
 + 
 +<code cpp> 
 +    catch(std::exception &ex) { 
 +      cerr << "std::exception occured!\n"; 
 +      in.close(); 
 +      throw ex;       // rethrows the same exception object 
 +    } 
 +</code>
 ===== Δήλωση των εξαιρέσεων που παράγουν οι συναρτήσεις (exception specifiers) ===== ===== Δήλωση των εξαιρέσεων που παράγουν οι συναρτήσεις (exception specifiers) =====
  
cpp/exception.txt · Last modified: 2023/05/15 14:01 by gthanos