我试图理解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)
不会调用析构函数.谁能告诉我不同行为的原因是什么?
谢谢,李
你抛出异常的事实在这里是无关紧要的.在第一个示例中,sd是堆栈中存在的对象.当执行退出其范围时,无论出于何种原因,它都会被销毁.在第二个示例中,sd是指向使用显式分配的对象的指针new.在传递指针之前,不会销毁此对象delete; 因为你从未这样做,你的程序目前正在泄漏它.
| 归档时间: |
|
| 查看次数: |
622 次 |
| 最近记录: |