Newsgroup: it.comp.lang.delphi
Titolo: Destroy

Ciao a tutti, 
ho 3 classi : Pippo, Pluto, Paperino.
Pippo all' OnCreate crea un'istanza di Paperino : 
constructor TPippo.Create(AOwner: TComponent);
begin
  inherited;
  Paperino := TPaperino.Create(Self);
end;
Lo stesso lo fà Pluto : 
constructor TPluto.Create(AOwner: TComponent);
begin
  inherited;
  Paperino := TPaperino.Create(Self);
end;
Fin quì tutto bene.
Ora il Destroy di Pippo : 
destructor TPippo.Destroy;
begin
  if assigned(Paperino) then
     Paperino.Free;
  inherited;
end;
e quello di Pluto : 
destructor TPluto.Destroy;
begin
  if assigned(Paperino) then
     Paperino.Free;
  inherited;
end;
Ora il problema è che quando chiudo una form 
che ha instanziato sia Pippo che Pluto, 
al Destroy di Pluto va in errore.
Trova Paperino assegnato, 
ma quando fa in .FREE va in eccezione di memoria.
Non riesco a capire dove sbaglio.
Aiutatemi.
Ciao
Rino

Paperino è privato per Pippo e Pluto?
Altrimenti prova ad usare FreeAndNil al posto di .Free;
Bye,
Raktzo



 Rino
Ciao
P.

 Non riesco a capire dove sbaglio.
Siccome Paperino ha un owner, non è necessario richiamare il metodo Free 
poichè a fare ciò ci pensa il "meccanismo di ownership" implementato 
nella VCL di Delphi.
O eviti di assegnare un owner, o eviti le chiamate esplicite al metodo Free.
Ciao,
   Marco.
-- 
MARCO «Alka» BREVEGLIERI
   (
http://www.marco.breveglieri.name
)
Leggi le FAQ di ICLD: 
http://icld.altervista.org

Se Paperino è un'unica variabile è normale che si verifichi. In questo 
caso crea 2 variabili private (una nell'oggetto Pippo e una nell'ggetto 
Pluto).
Ciao,
David

 ha scritto:

ma a me sembra di aver fatto così...
nelle private di Pippo e Pluto ho messo FPaperino : TPaperino...
Ed infatti poi faccio : 
if assigned(FPaperino) then
   FPaperino.Free;
Se sono 2 instanze differenti perchè vengono distrutte entrambe?

 Se sono 2 instanze differenti perchè vengono distrutte entrambe?
Hai provato a verificare quanto ho detto io? :-)


> Hai provato a verificare quanto ho detto io? :-)
si... e non va... :-((

 al Destroy di Pluto va in errore.
Posta l'intero codice sorgente oppure mettilo da qualche parte.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 si... e non va... :-((
Cioè? Cosa accade? Spiega... :-)
Forse è meglio che posti l'intero codice, per capirne di più.
Ciao,
   Marco.


Se sono 2 instanze differenti perchč vengono distrutte entrambe?
Bisogna vedere se le variabili puntano realmente a due
istanze differenti o ti stai perdendo una delle due
istanze in memoria. Ma sto benedetto TPaperino da cosa
č ereditato da un form? Se Si allora togli dalla unit
la dichiarazione di variabile globale che delphi
introduce automaticamente nel momento che erediti.
E' l'unica situazione che potrebbe creare il problema
che riscontri, a meno di altro codice maligno ;) ...
	Ciao
	MassimoB
 
---------------------------------
http://www.massimobeschi.it/
---------------------------------
Se tu pagare come dici tu ...
Io lavorare come dico io ...
Se tu pagare come dico io ...
Io lavorare come dici tu ...
---------------------------------

 
In questo caso, la sola "inherited" è sufficiente
-- 
Stefano Carboni
http://www.lazyclan.com

 ha scritto nel messaggio 
news:200506201...@mynewsgate.net...


Rino
--- posted by geoForum on 
http://www.delphiedintorni.it

Grazie a tutti,
cmq, per ora ho tolto il .FREE sotto vostro consiglio.
Però voglio postarvi il codice per capire dove sbagliavo.
Solo che è tanto, preferirei pulirlo un pò, 
vorrei estrapolare solo il codice inerente al problema su citato.
Ma mi ci vorrà un pò di tempo.
Spero che in giornata abbia il tempo di farlo in modo da svelare
l'arcano.....
Vi ringrazio ancora per l'assidua partecipazione.
Ciao
Rino