User Tools

Site Tools


cpp:exception_specifiers

Δήλωση των εξαιρέσεων που παράγουν οι συναρτήσεις (exception specifiers)

Κατά τη δήλωση μίας συνάρτησης είναι δυνατόν να ορίσετε εάν αυτή μπορεί να παράγει κάποιου είδους exception. Υπάρχουν 3 διαφορετικού τύποι ορισμών οι οποίοι δίνονται παρακάτω:

  1. int functionName() throw(): Ο συγκεκριμένος ορισμός δηλώνει ότι δεν παράγεται καμία εξαίρεση.
  2. int functionName() throw(std::bad_alloc): Ο συγκεκριμένος ορισμός δηλώνει ότι μπορεί να παραχθεί μία εξαίρεση τύπου std::bad_alloc.
  3. int functionName() throw(…): Ο συγκεκριμένος ορισμός δηλώνει ότι μπορεί να παραχθεί οποιουδήποτε τύπου εξαίρεση.

Τους παραπάνω ορισμούς είναι δυνατόν να τους συναντήσετε στις standard βιβλιοθήκες της C++. Δεν είναι όμως ευρέως χρησιμοποιούμενοι και η υποστήριξη τους από τους C++ compilers είναι συχνά ελλειπής. Δεν συνιστάται η χρήση τους σε κώδικα που γράφετε εσείς, λόγω της ελλειπούς υποστήριξης από την κοινότητα της C++.

Στο παρακάτω παράδειγμα, κατά τη μεταγλώττιση, ο compiler δεν διαμαρτύρεται για τη μη διαχείριση του exception που παράγει η μέθοδος function1.

exception_specifiers.cpp
#include <iostream>
using namespace std;
 
int function1() throw(std::bad_alloc) {
  throw new std::bad_alloc;
  return 10;
}
 
int main() {
  cout << function1() << endl;
}
cpp/exception_specifiers.txt · Last modified: 2019/05/06 07:50 (external edit)