可能重复: 防御程序设计
今天上午,我们就防御性编程的问题进行了一次很好的讨论。我们有一个代码检查,其中传入了一个指针,但是没有检查它是否有效。
有些人认为只需要检查空指针。我怀疑是否可以在更高的级别上检查它,而不是它通过的每一个方法,如果点的另一端的对象没有满足某些要求,检查null是一个非常有限的检查。
我理解并同意检查null总比不检查要好,但我认为只检查null提供了一种错误的安全感,因为它的范围有限。如果要确保指针是可用的,请检查是否大于空值。
你在这个问题上有什么经验?如何在代码中为传递给下属方法的参数编写防御?
发布于 2009-12-16 18:36:02
在代码完成2中,在错误处理一章中,我被介绍了路障的概念。本质上,路障是严格验证所有输入到其中的代码。路障内的代码可以假定任何无效的输入都已经处理过,并且接收到的输入是好的。在路障内部,代码只需要担心路障内其他代码传递给它的无效数据。断言条件和明智的单元测试可以增加您对设置障碍的代码的信心。这样的话,你就可以在路障上进行防守,但在路障内部就没那么好了。另一种思考方法是,在路障处,您总是正确地处理错误,而在路障中,您只是在调试构建中断言条件。
就使用原始指针而言,通常所能做的最好是断言指针不是null。如果您知道内存中应该包含什么内容,那么您可以确保内容在某种程度上是一致的。这就引出了一个问题:为什么这个内存没有被包裹在一个可以验证其一致性的对象中。
那么,为什么在这种情况下使用原始指针呢?使用引用还是智能指针更好?指针是否包含数字数据,如果是,是否最好将其封装在管理该指针生命周期的对象中?
回答这些问题可以帮助你找到一种更防御性的方法,因为你最终会得到一个更容易防御的设计。
https://stackoverflow.com/questions/1916515
复制相似问题