Я сделал небольшую ошибку при кодировании в эти выходные.
В следующем коде я создаю объект и преобразую его в интерфейс . Позже я пытаюсь освободить его с помощью FreeAndNil ()
;
type
IMyIntf = interface
[...]
end;
TMyClass = class(TInterfacedObject, IMyIntf)
[...]
end;
var
Myintf : IMyIntf;
begin
Myintf := TMyClass.Create;
[...] // Some process
FreeAndNil(Myintf); // CRASH !!!
end;
Конечно, на этой строке происходит сбой программы. Я полностью понимаю проблема , но я не понимаю , почему компилятор не предупреждает меня об этом ? За этим нет никаких динамических вещей, просто пытаюсь освободить интерфейс !!! Почему он не пишет мне ошибку / предупреждение?
Есть ли какое-то реальное объяснение или это просто ограничение компилятора?