Exception handling in constructors

16 views
Skip to first unread message

Demosthenes Koptsis

unread,
May 5, 2012, 6:00:27 AM5/5/12
to TheHackerspace, Ευστάθιος Χατζηκυριακίδης
Για να διαχειριστώ λάθη μέσα σε constructors βρήκα ότι μπορώ να έχω ένα
try...catch μπλοκ και να πετάξω ένα exception.

π.χ.
---------------------------------------------------------------------
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A
  5. {
  6. public:
  7.   void f(){
  8. //      int x;
  9. //      x=1/0;
  10.     throw 10;
  11.   }
  12.  
  13.   A(){
  14.     try{
  15.       f();
  16.     }
  17.     catch(int e){
  18.       cout << "Exception caught\n";
  19.     }
  20.   }
  21. };
  22.  
  23. int main (int argc, const char * argv[])
  24. {
  25.  
  26.   A a;
  27.   return 0;
  28. }
---------------------------------------------------------------------
Ωστόσο παρατήρησα ότι μόνο
    throw 10;
μπορώ να κάνω και όχι να ποιάσει λάθη όπως
  1. //      int x;
  2. //      x=1/0;
Κανονικά δεν θα έπρεπε να ποιάσει το throw από το x=1/0;
Γιατί ποιάνει μόνο το δικό μου throw;

Αυτό σημαίνει για να ελέξγω ένα λάθος σε constructor θα πρέπει να κάνω if..else x==0 και να πετάξω throw στο λάθος.

faif faifgnu

unread,
Jun 10, 2012, 10:04:58 AM6/10/12
to thessaloniki...@googlegroups.com

Η διαίρεση με το μηδέν είναι εξαίρεση υλικού (hardware exception) και δε μπορεί να "πιαστεί" από το πρόγραμμα σου.
 
Γιατί ποιάνει μόνο το δικό μου throw;

Έτσι όπως έχεις τον κώδικα "πιάνεις" μόνο εξαιρέσεις ακέραιων αριθμών. Υπάρχουν γενικότερες κατηγορίες εξαιρέσεων, πχ std::domain_error, std::exception, κτλ. Λεπτομέρειες εδώ: http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/c++_practical_programming_013.html
 

Demosthenes Koptsis

unread,
Jun 10, 2012, 3:07:10 PM6/10/12
to thessaloniki...@googlegroups.com
οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ !

οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ exception.




οΏ½οΏ½οΏ½οΏ½ 10/6/2012 17:04, οΏ½/οΏ½ faif faifgnu οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½:


On Saturday, May 5, 2012 12:00:27 PM UTC+2, Demosthenes wrote:
οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ constructors οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½
try...catch οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ exception.

οΏ½.οΏ½.
---------------------------------------------------------------------
  1. #include <iostream>
  2. usingοΏ½namespaceοΏ½std;
  3. οΏ½
  4. classοΏ½A
  5. {
  6. public:
  7. οΏ½οΏ½voidοΏ½f(){
  8. // οΏ½ οΏ½ οΏ½int x;
  9. // οΏ½ οΏ½ οΏ½x=1/0;
  10. οΏ½ οΏ½οΏ½throwοΏ½10;
  11. οΏ½οΏ½}
  12. οΏ½
  13. οΏ½ A(){
  14. οΏ½ οΏ½οΏ½try{
  15. οΏ½ οΏ½ οΏ½ f();
  16. οΏ½ οΏ½οΏ½}
  17. οΏ½ οΏ½οΏ½catch(intοΏ½e){
  18. οΏ½ οΏ½ οΏ½οΏ½coutοΏ½<<οΏ½"Exception caught\n";
  19. οΏ½ οΏ½οΏ½}
  20. οΏ½οΏ½}
  21. };
  22. οΏ½
  23. intοΏ½mainοΏ½(intοΏ½argc,οΏ½constοΏ½charοΏ½*οΏ½argv[])
  24. {
  25. οΏ½
  26. οΏ½ A a;
  27. οΏ½οΏ½returnοΏ½0;
  28. }
---------------------------------------------------------------------
οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½
οΏ½ οΏ½οΏ½throwοΏ½10;
οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½
  1. // οΏ½ οΏ½ οΏ½int x;
  2. // οΏ½ οΏ½ οΏ½x=1/0;
οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ throw οΏ½οΏ½οΏ½ οΏ½οΏ½ x=1/0;

οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ (hardware exception) οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ "οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½" οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½.
οΏ½
οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ throw;

οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ "οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½" οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½. οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½, οΏ½οΏ½ std::domain_error, std::exception, οΏ½οΏ½οΏ½. οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½: http://www.linuxtopia.org/online_books/programming_books/c++_practical_programming/c++_practical_programming_013.html
οΏ½

οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ constructor οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½ if..else x==0 οΏ½οΏ½οΏ½ οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½ throw οΏ½οΏ½οΏ½ οΏ½οΏ½οΏ½οΏ½οΏ½.

--
TheHackerspace - Thessaloniki's Hackerspace
οΏ½
http://the-hackerspace.org/

faif faifgnu

unread,
Jun 15, 2012, 3:59:02 PM6/15/12
to thessaloniki...@googlegroups.com
Ksanagrapsto kalytere estw kai me greeklish giati de diavazetai etsi... :)

Demosthenes Koptsis

unread,
Jun 15, 2012, 5:12:44 PM6/15/12
to thessaloniki...@googlegroups.com
den kserw giati soy bghke etsi.

tespa.

to brika to la8os.

den einai exception to divide by zero.

ok


οΏ½οΏ½οΏ½οΏ½ 15/6/2012 22:59, οΏ½/οΏ½ faif faifgnu οΏ½οΏ½οΏ½οΏ½οΏ½οΏ½:
Reply all
Reply to author
Forward
0 new messages