É tão inexplicável.
tipo
IInterface1 = interface
fim;
Tclass1 = classe (tinterfacedObject, iInterface1)
destruidor destruir;
fim;
Tform1 = classe (tform)
Button1: tbutton;
Procedimento FormCreate (remetente: Tobject);
Procedimento Button1Click (remetente: Tobject);
Privado
{Declarações privadas}
Classe1: iinterface1; // Observe que esta é a interface iinterface1, não a classe tclass1, tclass1 não tem esse problema
público
{Declarações públicas}
fim;
Implementação
{$ R *.dfm}
{Tclass1}
destruidor tclass1.destroy;
Começar
ShowMessage ('Destroy!');
herdado;
fim;
procedimento TForm1.FormCreate (remetente: Tobject);
Começar
Classe1: = tclass1.create;
fim;
procedimento TForm1.Button1Click (remetente: TOBJECT);
Começar
Classe1: = Nil;
// Se a classe1 for a classe tclass1, ela não pulará para destruir.
//Por que? Por que?
fim;