如果分配(MyObj)那么更好,还是如果(MyObj <> nil)那么更好



当我阅读原始 delphi 源代码(主要是在 firemonkey 中(所做的修改时,我看到 embarcadero 有时会用if (MyObj <> nil) then替换if assigned(MyObj) then。他们这样做的真正原因是什么,或者它只是纯粹的化妆品?

对于指针、对象引用、动态数组、接口,没有区别。你可以做任何一个。

对于方法指针,这是有区别的。IDE 窗体设计器对已发布的方法指针属性(例如事件(执行一些技巧。nil这些指针时,IDE 窗体设计器会将索引存储在其中一个指针的低两个字节中。如果你要针对nil进行测试,你会发现该值没有nil,这是不需要的。

所以你使用Assigned忽略低两个字节。这在 Windows 上是可能的,因为低于 65536 的内存地址是保留的,不能是有效的指针。这对于在 IDE 表单设计器中运行的代码(即设计时包(至关重要。在这些情况下,组件编写器必须使用Assigned

请注意,这仅适用于 Win32 编译器。由于这是运行 IDE 的唯一平台,因此它是Assigned具有此特殊行为的唯一平台。

艾伦鲍尔在这里讨论这个问题:分配还是不分配,这是个问题......

还有一点要说明:

  • 使用Assigned永远不会错。
  • 当主题是支持已发布属性的方法指针并且代码在设计时运行时,与nil进行比较是错误的。

就个人而言,我总是使用Assigned,因为这可以使代码保持一致。此外,这意味着您甚至不必考虑测试的主题是单指针类型还是双指针类型,或者您的代码是否在设计器中运行。

相关内容

最新更新