前面讲述了异常处理的重要性和有效性。其实异常处理也有其局限性。前面的讨论显然说明,应该在程序设计时即加入异常处理功能。但这样做会增加程序代码,降低程序的运行速度。异常规范不适用于模板,模板函数引发的异常可能随特定的具体化而异。异常和动态内存分配总是不能协调工作的。例如,
在上面的函数中,一旦执行了throw函数,即终止了test()函数。string型变量仍然使其析构函数被调用,这得益于堆栈解退,即内存被正确地管理。例如,
上述代码中,解退堆栈时,需要删除堆栈中的变量ar。函数提前终止意味着函数末尾的delete[]语句无法执行。指针消失了,但该指针指向的内存块未被释放,并且不能被访问。简而言之,这块内存泄漏了。
这种简单的内存泄漏是可以避免的。程序员可以在引发异常的函数中捕获该异常,在catch块中包含一些清理代码,然后重新引发异常。例如,
异常处理对于某些项目极为重要,但同时也增加了编程的工作量,增大了程序、降低了速度。由于编译器对异常的支持以及用户的经验还没达到成熟的程度,因此程序员应有节制地使用该特性。(www.xing528.com)
提示
在STL中,异常处理的复杂程度越来越高。其主要原因在于文档没有对异常处理例程进行解释或解释蹩脚。任何熟练使用现代操作系统的人都遇到过“未处理异常”导致的错误和问题。这些错误是程序员通常面临的异常艰难的战役。读者应通过不断了解库的复杂性,熟悉各种异常的引发原因及处理措施。
尤其对于程序员新手而言,理解库中的异常处理比学习C语言更难。要开发出优质的软件,必须花时间了解库中的复杂内容,就像必须花时间学习C++一样。通过学习库文档和源代码,了解到的异常和错误处理细节会使程序员受益。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。