读书人

try.catch有关问题

发布时间: 2012-05-05 17:21:10 作者: rapoo

try..catch问题
用try捕捉到错误后
程序跳到了catch运行
而我在try块动态分配了数个变量
到了catch块后这些变量动态分配出来的变量应该不会自动释放吧?
可那时我已经不在那个指针的作用域了,不能用delete释放了
请问要怎么处理??

[解决办法]
在try开始前声明一次.函数结束释放空间。
[解决办法]
try{

int *pi=new int();
auto_ptr<int> ap=pi;

}catch(...)
{}
[解决办法]
将定义放在try...catch外面,在catch中删掉
int *pi;
try{
pi = new int();
auto_ptr<int> ap=pi;
}catch(...)
{
delete pi;
}
[解决办法]
如果不需要考虑节省内存,可以不用动态申请。
试试全局分配。
如果需要很多个指针,可以用指针数组。
那样释放的时候一个for就可以解决了。

探讨

引用:

将定义放在try...catch外面,在catch中删掉
int *pi;
try{
pi = new int();
auto_ptr<int> ap=pi;
}catch(...)
{
delete pi;
}


可是try中好多动态分配,这样每一个都要定义在外面了?
还有没其他好一点的方法?

[解决办法]
不太清楚哦,不过你可以在那个类的析构函数里面加上一句cout,显示一点信息
然后故意分配一个很大的内存引发异常,看看会不会显示出信息。
如果显示的话说明析构函数执行了,那么内存也释放了。
[解决办法]
把要new的指针放在try前面,不要被try包含,catch里判断是否非零,不是则delete

读书人网 >C++

热点推荐