Newsgroup: it.comp.lang.delphi
Titolo: sintassi with TObject.create do

Salve a tutti
volevo chiedere alcune informazioni su di un costrutto che mi e' spesso 
capitato di vedere, che mi sembra piuttosto potente ma che non ho mai 
visto spiegato su libri e manuali e quindi non so bene come usarlo:
with TObject.create do
begin
...
come faccio a riferirmi a TObject qui, ad esempio per passarlo come 
parametro ad una procedura?
...
end;
altra domanda: l'oggetto viene distrutto dopo l'istruzione end?

 altra domanda: l'oggetto viene distrutto dopo l'istruzione end?
No, continua ad esistere finchè non esci dallo scope, cioè al termine della
procedura/funzione dove hai istanziato l'oggetto.
Ciao
-- 
Morde

 [...]
Acc... ti ho risposto su "Delphi&Dintorni"... :-|
Ciao,
   Marco.
-- 
MARCO BREVEGLIERI
  (
http://www.marco.breveglieri.name
)

procedura/funzione dove hai istanziato l'oggetto.
Ancora no, continua ad esistere ANCHE DOPO (non finché) essere usciti
dallo scope.  Non c'è distruzione implicita degli oggetti, in Delphi,
vanno esplicitamente distrutti.

 ha scritto nel messaggio 
news:45f1822a$0$37196$4faf...@reader3.news.tin.it...

Prova cosi':
private
    procedure MiaFunzione(O: TObject);
...
TForm1.MiaFunzione(O: TObject)
begin
...
O.Free;
end;
// che richiami con
MiaFunzione(TObject.Create);
Giorgio

 MiaFunzione(TObject.Create);
Ma che vantaggi da questa soluzione?
Io onestamente non capisco l'utilità finale di questi "costrutti".
Cioè, li trovo così fuorvianti, oltreché rischiosi in alcuni casi, 
rispetto ad un "secco" e banale:
   MyObj := TMyClass.Create;
   try
     // ... do something ...
   finally
     MyObj.Free;
   end;
Certe forme di scrittura, secondo me, andrebbero bene tutt'al più 
nell'ambito di un'architettura che prevede l'uso di un Garbage 
Collector, ad esempio nelle applicazioni basate su .NET Framework, dove 
ci si può anche permettere di evitare la memorizzazione di un 
riferimento (nei casi in cui questo è possibile, cioè per le classi che 
non implementano /IDisposable/), benché io utilizzi comunque la stessa 
identica sintassi sopra riportata anche in quel caso.


 
infatti, come ho detto l'ho vista scritta da piu' parti
e pensavo fosse una figata da professionisti
ma evidentemente mi sbagliavo.
ciao e grazie
Luca

 rispetto ad un "secco" e banale:
<snip>
Concordo al 100%, ma a quanto pare queste pseudo-"figate da
professionisti" attraggono i newbie. Come dire: non mi interessa sapere
cosa fa, perché e come lo fa, dicono sia una figata ed io la faccio.
Uno dei pochi casi in cui giustifico (pur storcendo il naso) che a
un'allocazione in un determinato scope possa corrispondere una
deallocazione in un altro scope è quando si usano dei thread e si passano
delle istanze  da un thread all'altro. In Delphi non è possibile copiare
staticamente un oggetto, quindi bisogna per forza ricorrere
all'allocazione dinamica.
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel messaggio 
news:45f294ab$0$17951$4faf...@reader1.news.tin.it...

Vi sono occasioni nelle quali il "costrutto" e' essenziale, ad esempio pensa 
alla necessita' di creare piu' oggetti thread tutti "simili" dei quali a 
priori non ne conosci il numero.
L'esempio che ti postato permette di creare quanti Tobject vuoi, 
contemporaneamente esistenti. Questa puo' essere ad esempio una necessita'..
Giorgio 

 contemporaneamente esistenti. Questa puo' essere ad esempio una necessita'..
L'esempio che tu hai postato è solo un orripilante tecnica per creare un
oggetto da una parte, passarlo a una funzione, in modo da usarlo al suo
interno come variabile e rilasciarlo. E' un esempio slegato assolutamente
da quanto dicevi prima e la cui utilità, nella pratica di tutti i giorni,
è pressoché nulla. 



Questo e' il contesto nel quale puo' essere utile, piu' ITALIANO di cosi' 
non so come dirlo. Spiegarlo a chi ha fatto la domanda non e' un errore ma 
un corretto chiarimento!!!
Chiaro che se poi necessita di usare un solo oggetto la soluzione con la 
variabile come postata da Marco puo' essere la piu' idonea.
Giorgio 

 Questo e' il contesto nel quale puo' essere utile
Non sono gli altri ad avere problemi con l'italiano, caro Padoan.
Quando ti "quoti", non citare solo ciň che ti piace: hai scritto che il
costrutto č "essenziale"[1] in certi casi, citando un esempio in cui č
tuttaltro che *essenziale*.
[1] Tratto dal Garzanti:
Lemma: essenziale
Sillabazione/Fonetica 	[es-sen-ziŕ-le]
Etimologia: Dal lat. tardo essentiaŻle(m), deriv. di essenti°a 'essenza'
Definizione: agg. che costituisce l'essenza di una cosa; sostanziale,
fondamentale


 end;
L'unica situazione in cui ne faccio uso è quando devo aprire un form
modale, perchè mi evita una variabile (e nient'altro):
with TMyForm.Create(self) do
 try
   value = ShowModal()
   ....
   uso della variabile value
   ....
 finally
   Free()
 end
Giuseppe

a che pro tutto 'sto casino?
per non dichiarare una varibaile usare un try-.finally per liberare le 
risorse?
non so...
A.

alberto salvati ha scritto:

Porca miseria, ma perché io non ho il dono di riuscire a sintetizzare in 
un'unica frase un concetto come fai tu? :-)


 vanno esplicitamente distrutti.
Grazie per i chiarimenti.
Ciao
-- 
Morde.