Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- template<typename T>
- class MyRaii {
- public:
- MyRaii(T* ptr)
- : ptr_(ptr)
- {
- cout << "Hello, "s << ptr_ << endl;
- }
- ~MyRaii() {
- delete ptr_;
- cout << "Goodbye, "s << ptr_ << endl;
- }
- private:
- T* ptr_;
- };
- class Obj {
- public:
- Obj(int id) : id_(id) {
- cout << "Obj("s << id_ << ")"s << endl;
- }
- ~Obj() {
- cout << "~Obj("s << id_ << ")"s << endl;
- }
- private:
- const int id_;
- };
- void Thrower(int id) {
- MyRaii<Obj> my3{new Obj(id)};
- throw runtime_error("oops"s);
- }
- int main() {
- {
- MyRaii<Obj> my1(new Obj(1));
- } // ok
- try {
- MyRaii<Obj> my2{new Obj(2)};
- Thrower(3);
- } catch (...) {
- cout << "hello from catch"s << endl;
- } // ok
- try {
- MyRaii<Obj> my4{new Obj(4)};
- Thrower(5);
- } catch (const domain_error& e) {
- cout << e.what() << endl;
- } // не ok, 4 и 5 нет выводов из деструкторов 4 и 5 -- не разрушились?
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement