我正在查看一些代码(Delphi 7),以下检查位于特定对象的每个方法调用的顶部:
if not Assigned(self) then
raise Exception.CreateRes(@sAbstractError);
{ Real code for this method}
Run Code Online (Sandbox Code Playgroud)
我想这会阻止我尝试在空对象指针上调用方法.但是,一旦我尝试访问该情况下的成员数据,我会得到一个例外,对吗?
这是我以前从未见过的某种标准吗?有问题的对象来自TPersistent.
Remy Lebeau 表示:“不能保证访问nil指针会引发异常。这是未定义的行为。任何事情都可能发生。可能会引发异常,或者您可能只是读取垃圾,或者可能会浪费内存,或者.. ”。怎么来的?在哪种情况下,访问NIL对象的方法不会引发AV并导致内存损坏?
// (Obj is any kind of object. Let's say TStringList)
Obj = nil;
Obj.LoadFromFile();
Run Code Online (Sandbox Code Playgroud)