飞哥 2018年05月25日
一个关于 try catch 的问题, 工作中遇到的。 十分不解
先上代码 写了个例子程序

#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打开,才会进行析构


请大神帮忙解释下,这是为什么???
...全文
1284 点赞 收藏 38
写回复
38 条回复

还没有回复,快来抢沙发~

发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告