C++ 异常处理(四) 有关异常处理的注意事项

来源:互联网 发布:淘宝免费打单软件 编辑:程序博客网 时间:2024/04/28 19:25

有关异常处理,应在程序设计时就加入,而不是以后加入,但也有缺点:

1,使用异常会增加程序的代码,降低程序的运行速度。

2,异常规范不适用于模板,因为模板函数引发的异常可能随特定的具体化而定。

3,异常与动态内存分配并非总能协同工作。


如动态内存的例子:

void test1(int n){string mesg("I'm trapped in an endless loop");...if (oh_no)throw exception();...return;}

string类采用动态内存分配,通常当函数结束,将为mesg调用string的析构函数。

虽然 throw 语句过早地终止了函数 ,但它仍然使得析构函数被调用,这归于栈解退。


void test2(int n){double * ar = new double[n];...if (oh_no)throw exception();...delete [] ar;return;}
这里,解退栈时,将删除栈中的变量ar,但函数过早的终止意味着函数末尾的delete[]语句被忽略。

指针消失 了,但它指向的内存块未被释放,并且不可访问。这说明内存被泄漏了。

避免措施一:

void test3(int n){double * ar = new double[n];try{if (oh_no)throw exception();}catch (exception & e){delete [] ar;throw;}...delete [] ar;return;}


另一种方法:使用智能指针。



0 0