gpt4 book ai didi

c++ - 在大型 C++ 代码库中避免空指针异常

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:25 25 4
gpt4 key购买 nike

我继承了一个大型 C++ 代码库,我的任务是避免代码库中可能发生的任何空指针异常。是否有可用的静态分析工具,我想是 lint,您已经成功使用了。

您还注意哪些其他事项?

最佳答案

您可以从消除 NULL 的来源开始:

改变

if (error) {
return NULL;
}

进入

if (error) {
return DefaultObject; // Ex: an empty vector
}

如果返回默认对象不适用并且你的代码库已经使用了异常,那么做

if (error) {
throw BadThingHappenedException;
}

然后,在适当的地方添加处理。

如果您正在使用遗留代码,您可以创建一些包装函数/类:

ResultType *new_function() {
ResultType *result = legacy_function();
if (result) {
return result;
} else {
throw BadThingHappenedException;
}
}

新功能应该开始使用新函数并有适当的异常处理。

我知道有些程序员就是不会得到异常,包括像 Joel 这样的聪明人.但是,返回 NULL 最终发生的是这个 NULL 像疯了似的传递,因为每个人都会认为处理它并默默地返回不是他们的事。有些函数可能会返回错误代码,这很好,但调用者通常最终会返回另一个 NULL 来响应错误。然后,您会在每个函数中看到很多 NULL 检查,无论该函数多么微不足道。而且,只需要一个不检查 NULL 的地方就会使程序崩溃。异常会迫使您仔细考虑错误并准确决定应该在何处以及如何处理它。

您似乎只是在寻找简单的解决方案,例如静态分析工具(您应该始终使用)。更改指向引用的指针也是一个很好的解决方案。然而,C++ 具有 RAII 的优点,它消除了“try {} finally {}”无处不在的需要,因此我认为它值得您认真考虑。

关于c++ - 在大型 C++ 代码库中避免空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1180832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com