【发布时间】:2009-12-16 18:06:31
【问题描述】:
今天早上我们就防御性编程主题进行了一场精彩的讨论。我们进行了代码审查,其中传入了一个指针,但没有检查它是否有效。
有些人认为只需要检查空指针。我质疑它是否可以在更高级别进行检查,而不是通过它传递的每个方法,并且如果另一端的对象不满足某些要求,则检查 null 是一种非常有限的检查。
我理解并同意检查 null 总比没有检查好,但在我看来,只检查 null 会提供一种错误的安全感,因为它的范围有限。如果要确保指针可用,请检查是否有多个 null。
您在这个主题上有什么经验?对于传递给从属方法的参数,您如何在代码中编写防御措施?
【问题讨论】:
-
这种问题总是让我想起海森堡先生 (en.wikipedia.org/wiki/Werner_Heisenberg)。
-
防御性编程只是单元测试不足或不正确的症状,像 Erlang 这样的语言实际上通常不鼓励防御性编程,因为它往往会掩盖更大的问题,我倾向于同意这一点。跨度>
-
@jldupont:你越“防御”,你的代码就越臃肿?
-
如果你想防御,你首先不应该使用原始指针。对于 byref 参数,一般来说,永远不能不指向任何东西的指针,使用
T&。对于可以为 null(或可选 byrefs)的指针,请使用boost::optional<T&>。