【发布时间】:2011-12-19 14:20:11
【问题描述】:
我想知道在现有代码中添加异常处理的优点和缺点。
我在开发一个在 Windows 环境中控制硬件卡的 SDK。
SDK 由 100 多个相互交互的 DLL 组成。我们现有的代码库可能包含 100 000 行(如果不是 1 000 000 行)代码行。我们的模块也是多线程的。
我们链接到正确的库,以便我们使用 nothrow new(lic.lib 而不是 licp.lib)。
大部分代码没有异常处理。编写代码时考虑到了这一点。
int *p = new int[size];
if (p == NULL)
{
// handle this case...
// most probably return an error code
}
char *q = new char[size];
if (q == NULL)
{
delete[] p;
// handle this case...
// most probably return an error code
}
我们还使用 RAII 技术。例如,我们在堆栈上创建了一个自动等待并释放临界区的对象。
我们希望提高 SDK 的稳定性。我们正在考虑添加异常处理,但我不相信这是提高稳定性的正确方法。我不得不承认我对 EH 没有太多经验。
一般来说,代码在取消引用之前检查是否被 0 除或检查 NULL 指针。但是,这种情况仍然会发生。由于除以零或取消引用 NULL 指针不会引发异常,我想知道通过 100 000 行代码并添加异常处理有多大用处,这将改变工作流程,如果不处理可能会导致内存泄漏适当地。我尝试了 SEH,但我认为开始使用 SEH 没有意义,而且它是 Microsoft 特有的,不是吗?
在我看来,我认为如果检查现有代码并简单地检查可能的崩溃(例如可能遗漏的除以零)会更有用。
另外,如果我要添加异常处理,我将如何进行?一次修改所有模块或自下而上开始(意思是,如果模块 A 调用模块 B,模块 B 调用模块 C,我会修改 C,然后是 B,然后是 A,因为我们发布我们的软件非常频繁,我们可能只有时间在下一个版本之前修改 C)。
谢谢!
【问题讨论】:
-
你知道
new永远不会返回NULL,对吧?