一个关于 try catch 的问题, 工作中遇到的。 十分不解
飞哥 2018-05-25 09:14:43 先上代码 写了个例子程序
#include "stdafx.h"
#include <iostream>
using namespace std;
class A
{
public:
A(){cout<<"创建";};
~A(){cout<<"析构";}
};
bool Test1(A ppp)
{
try
{
int a = 10;
int b = 20;
//return false;
}
catch(...)
{
return false;
}
}
int _tmain(int argc, _TCHAR* argv[])
{
A *p1 = new A; ;
Test1(*p1);
return 0;
}
事情是这样的,最近单位的程序发现有内存泄露,最后定位到 某个对象的引用计数 没有归0. 所以没析构。
经过各种调查,发现我们有一个函数里面有try catch ,但是在try 中 没有returen, 而return写在了catch中。
发现问题后,写了上面的例子
现在例子直接运行,执行完 test1 函数后,类A的析构函数是不执行的,除非把try里的return打开,才会进行析构
请大神帮忙解释下,这是为什么???