这个周末我在编码时犯了一个小错误。
在以下代码中,我创建了一个对象并将其转换为一个接口。稍后,我试图使用FreeAndNil()
来释放它;
type
IMyIntf = interface
[...]
end;
TMyClass = class(TInterfacedObject, IMyIntf)
[...]
end;
var
Myintf : IMyIntf;
begin
Myintf := TMyClass.Create;
[...] // Some process
FreeAndNil(Myintf); // CRASH !!!
end;
当然,程序在这一行崩溃了。我完全理解问题所在,但是我不明白的是,为什么编译器不会警告我呢?没有动态的东西在里面,我只是试图释放一个接口!!! 为什么它不写出错误/警告呢?
到底有没有真正的解释,还是只是编译器的限制?
GET_THE_THINGS_DONE
,因为这就是你告诉它要做的事情。 - Seth Carnegie