这样的new有办法delete吗?该怎么解决

这样的new有办法delete吗?
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的。

------解决方案--------------------
因为很多技术书上推荐用 catch (A &e),抛出时也不用new
------解决方案--------------------
new了一定要delete。

你看的那些书仅仅是介绍某种例子,很小的程序,反正泄露了也无所谓,退出程序后操作系统会把内存收回来。
------解决方案--------------------
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
    return 0;
}

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