栈解旋

lambdaios / 2024-01-15 / 原文


#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

class make {
public:
    make() {
        std::cout << "generate\n";
    }

    ~make() {
        std::cout << "delete\n";
    }
};

void func() {
    //在抛出异常的函数中,如果抛出异常之后,
    //但函数没有结束,这时,栈上申请的对象都会被释放
    make m;
    throw std::move(m);
}

void test() {

    try {
        func();
    }
    catch (make &m) {
        std::cout << "receive\n";
    }

}


int main(){

    
    test();

    return 0;
}