kal*_*kal 4 c++ null nullpointerexception
我继承了一个大的c ++代码库,我有一个任务,以避免代码库中可能发生的任何空指针异常.是否有可用的静态分析工具,我在想,你已经成功使用了.
你还有什么其他的东西?
您可以从消除NULL源开始:
更改
if (error) {
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
成
if (error) {
return DefaultObject; // Ex: an empty vector
}
Run Code Online (Sandbox Code Playgroud)
如果返回的默认对象不适用且您的代码库已经使用了异常,请执行
if (error) {
throw BadThingHappenedException;
}
Run Code Online (Sandbox Code Playgroud)
然后,在适当的位置添加处理.
如果您正在使用遗留代码,您可以创建一些包装函数/类:
ResultType *new_function() {
ResultType *result = legacy_function();
if (result) {
return result;
} else {
throw BadThingHappenedException;
}
}
Run Code Online (Sandbox Code Playgroud)
新功能应该开始使用新功能并具有适当的异常处理.
我知道一些程序员不会得到例外,包括像Joel这样的聪明人.但是,通过返回NULL最终发生的事情是,这个NULL会像疯了一样传递,因为每个人都会认为处理它并静默返回并不是他们的事.某些函数可能会返回错误代码,这很好,但是调用者通常最终会返回NULL-another-NULL以响应错误.然后,无论函数多么微不足道,您都会在每个函数中看到很多NULL检查.并且,只需要一个不检查NULL以使程序崩溃的地方.例外情况迫使您仔细考虑错误并确定应该在何处以及如何处理错误.
您似乎只是在寻找简单的解决方案,例如静态分析工具(您应该经常使用).更改引用指针也是一个很好的解决方案.但是,C++具有RAII的优点,它无需在任何地方"尝试{}",所以我认为值得您认真考虑.