当我读到在最初的delphi源代码中所做的修改时(主要是在火猴中),我看到embarcadero有时会用if (MyObj <> nil) then
代替if (MyObj <> nil) then
。他们是否有任何真正的理由这么做,还是这只是单纯的化妆品?
发布于 2018-05-22 07:55:31
对于指针、对象引用、动态数组、接口,没有区别。这两种你都可以。
对于方法指针,这是有区别的。IDE表单设计器对已发布的方法指针属性执行一些欺骗操作,例如事件。当这些是nil
时,index将索引存储在其中一个指针的低两个字节中。如果要对nil
进行测试,您会发现该值不是nil
,这是不需要的。
所以您使用Assigned
,它忽略低的两个字节。这在Windows上是可能的,因为低于65536的内存地址是保留的,并且不能是有效的指针。这对于在IDE表单设计器(即设计时包)中运行的代码至关重要。在这些情况下,组件编写器必须使用Assigned
。
请注意,这只适用于Win32编译器。因为这是IDE运行的唯一平台,这是Assigned
具有这种特殊行为的唯一平台。
Allen在这里讨论这个问题:分配还是不分配,这就是问题.
还有一点要指出:
Assigned
从来都不是错误的。nil
进行比较是错误的。就我个人而言,我总是使用Assigned
,因为这使代码具有一致性。此外,这意味着您甚至不必考虑测试的主题是单个指针类型还是双指针类型,或者您的代码是否在设计器中运行。
https://stackoverflow.com/questions/50462316
复制相似问题