这个问题在这里已有答案:
Remy Lebeau stated认为“无法保证访问nil指针会引发异常。这是未定义的行为。任何事情都可能发生。可能会引发异常,或者您可能只是阅读垃圾,或者您可能会丢失内存,或者...... “。怎么会?在哪些情况下,访问NIL对象的方法不会引发AV并导致内存损坏?
// (Obj is any kind of object. Let's say TStringList)
Obj = nil;
Obj.LoadFromFile();
无法保证访问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;