grazie dell'indicazione.

Ci ho lavorato un po' per trovare quale fosse la strada giusta per assicurarmi che tutto fosse rilasciato nella maniera corretta, il meglio che ho pensato è di inserire tutto nel metodo Free, anche perchè, per abitudine, così libero gli oggetti.
Ti posto il codice della procedura Free della classe TTBase deriva da TXML che deriva da TStringList.
Implementa la creazione di una pagina xml che viene appunto scritta su un file testo quando viene chiamata la procedura Free e trasferita in remoto.

codice:
procedure TTBase.Free;
var
  nome_file : string;
  locale_adr, remote_adr : string;
  host, user, psw : string;
  res : boolean;
begin

   // lo preleva dalle impostazioni
   locale_adr      := SetLocaleAdrMacro(IniFile.ReadString('Indirizzi Fisici', 'Root', ''));

   with DominiTbl do
   begin

        remote_adr    := FieldByName('adr_root');
        remote_adr    := SetRemoteAdrMacro(fDominio, remote_adr);

        host  := FieldByName('ftp_host');
        user  := FieldByName('ftp_user');
        psw   := FieldByName('ftp_password');

   end;


   nome_file := GetFileName;
   SaveToFile(locale_adr + '/' + nome_file);

   res := FtpPutFile(host, '21', remote_adr + '/' + nome_file, locale_adr + '/' + nome_file, User, psw);

   with TLogFile.Create ('gesti.log') do
   begin

     if not res then
       Write('non è stato possibile trasferire il file ' + nome_file)
     else
       Write('file ' + nome_file + ' correttamente trasferito via ftp');

     Free;

   end;

   with DominiTbl do Free;

   inherited;
   
end;
in questa modo sono sicuro che quando libero la memoria di un oggetto derivato il tutto mi viene scritto su disco e trasferito in remoto semplicamente scrivento oggett.Free.

Una classe figlia che implementa un layout a tre colonne ha il metodo Free

codice:
procedure TLAY3.Free;
begin

  Current := 'inside_sx';
  AddChild('div');
  Attributo('class', 'clear');
  AddContent('');

  Current := 'inside_dx';
  AddChild('div');
  Attributo('class', 'clear');
  AddContent('');

  Current := 'content_tag';
  AddChild('div');
  Attributo('class', 'clear');
  AddContent('');

  Current := 'innerColumnContainer';
  AddChild('div');
  Attributo('class', 'clear');
  AddContent('');


  inherited;

end;
l'inherited finale mi assicura che tutta la catena venga eseguita prima della distruzione dell'oggetto.

Se ti sembra che sia poco sicuro potrei provare a spostare il codice in Destroy.
ciao e grazie
sergio