- Код: Выделить всё
TApplication = Class(TInterfacedObject)
...
end;
В программе пишу:
- Код: Выделить всё
var
app: TApplication;
begin
app := TApplication.Create();
end.
При этом вот деструктор не вызывается, его надо вызывать вручную, т.е. app.Free(). Ситуация не меняется, если типом объекта я указываю TInterfacedObject. Но дальше я делаю так:
- Код: Выделить всё
var
app: IUnknown;
begin
app := TApplication.Create();
end.
И что же? Деструктор вызывается самостоятельно, как только объект покидает область видимости.
Собственно, вопрос. Так и должно быть или это косяк? Почему если класс реализует интерфейс, то его поведение становится ожидаемым только если я указываю типом сам интерфейс? Получается, если тип - не интерфейс, то и реализации интерфейса не происходит?