这样的new有办法delete吗?

airwolf1216 2012-03-27 01:25:37
class A
{

};

void fun1(int i)
{
if(i==0)
{
throw new A;
}
if (i==1)
{
throw new A;
}
else
{

}
}


void fun2(int i)
{
try
{
fun1(i);
}
catch (A* e)
{

}
}


这样写的程序,fun2(0)是不是调用一次就内存泄漏一次?这样的new有办法delete吗?
另外,是不是每个new都要delete,要不一定会吃内存?——换句话说,有没有某种情况下,new之后没用delete也不内存泄漏?
分不是很多,技术交流,我在很多c++书上看到new之后没delete的。
...全文
87 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
airwolf1216 2012-03-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 cattycat 的回复:]
C/C++ code
#include <iostream>
using namespace std;

class A
{
public:
~A(){cout<<"destructor"<<endl;}
};
int func(int i)
{
if(i == 1)
{
throw new A;
return 1;
}
else
r……
[/Quote]

这样的确是可以,不过你后面的 return 1;
是多余的
airwolf1216 2012-03-27
  • 打赏
  • 举报
回复
结帖了
cattycat 2012-03-27
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

class A
{
public:
~A(){cout<<"destructor"<<endl;}
};
int func(int i)
{
if(i == 1)
{
throw new A;
return 1;
}
else
return 0;
}

int main()
{
try{
func(1);
}catch(A * pa)
{
delete pa;
cout<<"deleted!"<<endl;
}
return 0;
}

可以在catch中delete吧,但一般不在抛出时new吧。
airwolf1216 2012-03-27
  • 打赏
  • 举报
回复
OK 还有需要补充的吗
muyi66 2012-03-27
  • 打赏
  • 举报
回复
new了一定要delete。

你看的那些书仅仅是介绍某种例子,很小的程序,反正泄露了也无所谓,退出程序后操作系统会把内存收回来。
luciferisnotsatan 2012-03-27
  • 打赏
  • 举报
回复
因为很多技术书上推荐用 catch (A &e),抛出时也不用new

64,682

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧