已分配vs<>零

时间:2010-12-19 16:55:13

标签: delphi pointers null

If Assigned(Foo)If (Foo <> nil)之间有什么区别吗?如果是,那么它们何时应该被使用?

2 个答案:

答案 0 :(得分:36)

几乎是一回事。 The official documentation个州

  

已分配(P)对应于测试   P&LT;&GT; nil表示指针变量,@ P   &LT;&GT;没有程序变量。

因此,如果P是普通指针,那么P <> nilAssigned(P) 完全等同于。另一方面,如果P是某个程序,那么

var
  p: TNotifyEvent = nil;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if Assigned(p) then
    p(Self);
end;

将起作用,

procedure TForm1.FormCreate(Sender: TObject);
begin
  if @p <> nil then
    p(Self);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if p <> nil then
    p(Self);
end;

甚至不会编译。因此,结论是P <> nilAssigned(P) 完全等效于每次都有效!

答案 1 :(得分:1)

Assigned()可以将任何对象作为参数处理,并且始终是您要调用的对象。 如果您得到一个空值,那么您肯定想将其测试为“未分配”,而不是因为空值<> nil而出现异常。