可以保证访问nil指针会引发异常吗? [重复]

问题描述 投票:0回答:1

这个问题在这里已有答案:

Remy Lebeau stated认为“无法保证访问nil指针会引发异常。这是未定义的行为。任何事情都可能发生。可能会引发异常,或者您可能只是阅读垃圾,或者您可能会丢失内存,或者...... “。怎么会?在哪些情况下,访问NIL对象的方法不会引发AV并导致内存损坏?

// (Obj is any kind of object. Let's say TStringList) 
Obj = nil;
Obj.LoadFromFile();
delphi
1个回答
8
投票

无法保证访问nil指针会引发异常。

真正。

但是,实际行为取决于实际代码。

如果调用动态或虚方法并尝试直接访问实例字段,则会引发异常。

nil参考上调用静态方法并在其中测试Self nil是完全安全的。

这种静态方法的最好例子是Free

procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end;

显然,上面的行为定义得很好,否则每个编写的Delphi程序都会随机(或一直)崩溃。


通常,访问nil引用字段将导致崩溃。理论上,足够大的课程是可能的。

示例课程由David Heffernan提供

type
   TSillyExample = class
     FStuff: array [0..SomeVeryLargeNumber-1] of Byte;
     FAreYouFeelingLucky: string;
   end;
© www.soinside.com 2019 - 2024. All rights reserved.