else
Result := IVCLComObject(FVCLComObject)._Release;
end;
不是Com对象的话,就什么也没作。我们作的不是Com对象,是不是就没有任何问题了呢?答案依然是否定的,考虑如下情况:
OBJ2 := TC2.Create;
try
Intf1 := OBJ2;
Intf1.DO;
Finally
OBJ2.Free;
Intf1 := nil;
End;
会怎么样呢?会出非法地址访问错误。为什么?上面说过把接口引用设为nil时,会调用_IntfClear,而_IntfClear又会调用对象的_Release,而这时这个对象已经释放了,自然就出非法地址访问错误啦。
有人说多此一举吗,接口引用只是个地址,没必要手动设为nil。
OBJ2 := TC2.Create;
try
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/