首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >你应该有多防御性?

你应该有多防御性?
EN

Stack Overflow用户
提问于 2009-12-16 18:06:31
回答 13查看 1.9K关注 0票数 7

可能重复: 防御程序设计

今天上午,我们就防御性编程的问题进行了一次很好的讨论。我们有一个代码检查,其中传入了一个指针,但是没有检查它是否有效。

有些人认为只需要检查空指针。我怀疑是否可以在更高的级别上检查它,而不是它通过的每一个方法,如果点的另一端的对象没有满足某些要求,检查null是一个非常有限的检查。

我理解并同意检查null总比不检查要好,但我认为只检查null提供了一种错误的安全感,因为它的范围有限。如果要确保指针是可用的,请检查是否大于空值。

你在这个问题上有什么经验?如何在代码中为传递给下属方法的参数编写防御?

EN

Stack Overflow用户

回答已采纳

发布于 2009-12-16 18:36:02

在代码完成2中,在错误处理一章中,我被介绍了路障的概念。本质上,路障是严格验证所有输入到其中的代码。路障内的代码可以假定任何无效的输入都已经处理过,并且接收到的输入是好的。在路障内部,代码只需要担心路障内其他代码传递给它的无效数据。断言条件和明智的单元测试可以增加您对设置障碍的代码的信心。这样的话,你就可以在路障上进行防守,但在路障内部就没那么好了。另一种思考方法是,在路障处,您总是正确地处理错误,而在路障中,您只是在调试构建中断言条件。

就使用原始指针而言,通常所能做的最好是断言指针不是null。如果您知道内存中应该包含什么内容,那么您可以确保内容在某种程度上是一致的。这就引出了一个问题:为什么这个内存没有被包裹在一个可以验证其一致性的对象中。

那么,为什么在这种情况下使用原始指针呢?使用引用还是智能指针更好?指针是否包含数字数据,如果是,是否最好将其封装在管理该指针生命周期的对象中?

回答这些问题可以帮助你找到一种更防御性的方法,因为你最终会得到一个更容易防御的设计。

票数 18
EN
查看全部 13 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1916515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档