例外 - c ++

use*_*400 2 c++ exception

我试图理解c ++中异常的行为.我写了以下代码:

class A{
public: 
    A(){
    };
    ~A(){
        cout<<"hello";

    };
};
int exceptionTest(){

    throw "blablabla";
};

int main(){

        A sd;
    int test = exceptionTest();
     return 0;
}
Run Code Online (Sandbox Code Playgroud)

我注意到在这种情况下,即使没有人捕获异常,析构函数也会被调用.如果我将"主要"代码更改为:

 int main(){

            A* sd = new A();
        int test = exceptionTest();
         return 0;
    }
Run Code Online (Sandbox Code Playgroud)

不会调用析构函数.谁能告诉我不同​​行为的原因是什么?

谢谢,李

moo*_*dow 8

你抛出异常的事实在这里是无关紧要的.在第一个示例中,sd是堆栈中存在的对象.当执行退出其范围时,无论出于何种原因,它都会被销毁.在第二个示例中,sd是指向使用显式分配的对象的指针new.在传递指针之前,不会销毁此对象delete; 因为你从未这样做,你的程序目前正在泄漏它.