Advertisement
giGii

exceptions2

Jun 24th, 2023
531
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.10 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. template<typename T>
  6. class MyRaii {
  7. public:
  8.     MyRaii(T* ptr)
  9.         : ptr_(ptr)
  10.     {
  11.         cout << "Hello, "s << ptr_ << endl;
  12.     }
  13.  
  14.     ~MyRaii() {
  15.         delete ptr_;
  16.         cout << "Goodbye, "s << ptr_ << endl;
  17.     }
  18.  
  19. private:
  20.     T* ptr_;
  21. };
  22.  
  23. class Obj {
  24. public:
  25.     Obj(int id) : id_(id) {
  26.         cout << "Obj("s << id_ << ")"s << endl;
  27.     }
  28.  
  29.     ~Obj() {
  30.         cout << "~Obj("s << id_ << ")"s << endl;
  31.     }
  32. private:
  33.     const int id_;
  34. };
  35.  
  36. void Thrower(int id) {
  37.     MyRaii<Obj> my3{new Obj(id)};
  38.     throw runtime_error("oops"s);
  39. }
  40.  
  41. int main() {
  42.     {
  43.         MyRaii<Obj> my1(new Obj(1));
  44.     } // ok
  45.  
  46.     try {
  47.         MyRaii<Obj> my2{new Obj(2)};
  48.         Thrower(3);
  49.     } catch (...) {
  50.         cout << "hello from catch"s  << endl;
  51.     } // ok
  52.  
  53.     try {
  54.         MyRaii<Obj> my4{new Obj(4)};
  55.         Thrower(5);
  56.     } catch (const domain_error& e) {
  57.         cout << e.what() << endl;
  58.     } // не ok, 4 и 5 нет выводов из деструкторов 4 и 5 -- не разрушились?
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement