Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision |
cpp:exception [2019/03/07 15:22] – [Κληρονομικότητα εξαιρέσεων] gthanos | cpp:exception [2019/05/05 17:04] – [Διαχείριση Εξαιρέσεων] gthanos |
---|
====== Διαχείριση Εξαιρέσεων ====== | ====== Διαχείριση Εξαιρέσεων ====== |
| |
Ας εξετάσουμε την κλάση **Vector** που είδαμε στην υπερφόρτωση των τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα. | Ας εξετάσουμε την κλάση **Vector** που είδαμε στην ενότητα της υπερφόρτωση τελεστών. Ο προσδιοριστής //nothrow// σε συνδυασμό με τον τελεστή **new** μας υποχρεώνει να ελέγξουμε την επιστρεφόμενη τιμή του τελεστή **new** για να δούμε έαν έχει αποτύχει η διαδικασία δέσμευσης μνήμης ή όχι και στην περίπτωση που έχουμε αποτυχία τερματίζουμε το πρόγραμμα. |
| |
<code cpp Vector.cpp> | <code cpp Vector.cpp> |
</code> | </code> |
| |
Αν και η παραπάνω διαδικασία δεν είναι λανθασμένη, έχει το βασικό μειονέκτημα ότι θα πρέπει να τερματίσουμε το πρόγραμμα, ακόμη και εάν ο λόγος αποτυχίας είναι ότι ο χρήστης της κλάσης επέτρεψε το πέρασμα αρνητικής τιμής ως όρισμα στον κατασκευαστή. | Αν και η παραπάνω διαδικασία δεν είναι λανθασμένη, έχει το βασικό μειονέκτημα ότι θα πρέπει να τερματίσουμε το πρόγραμμα, ακόμη και εάν ο λόγος αποτυχίας είναι ότι ο χρήστης της κλάσης επέτρεψε το πέρασμα αρνητικής τιμής ως όρισμα στον κατασκευαστή. Ο λόγος είναι ότι ακόμη και στην περίπτωση που αποτύχει η δέσμευση της μνήμης ο κατασκευαστής της κλάσης **Vector** επιστρέφει ένα αντικείμενο του οποίου η κατάσταση δεν είναι η αναμενόμενη. |
| |
| Επειδή, ο χρήστης της κλάσης **Vector** δεν έχει τρόπο να ελέγξει το "εσωτερικό" του αντικειμένου, υποθέτει πάντα ότι το αντικείμενο που επιστρέφεται είναι σωστό. Σε διαφορετική περίπτωση, ο κατασκευαστής θα πρέπει να τερματίσει το πρόγραμμα. |
| |
<code cpp VectorUse.cpp> | <code cpp VectorUse.cpp> |