Newsgroup: it.comp.programmare.win32
Titolo: Aiuto: Il misterioso "owner" di C++ Builder

Salve a tutti
Spero di non essere OT. Non riesco a comprendere il significato di "Owner" e
di una particolare sintassi di C++ Builder.
Riporto un esempio:
[...]
__fastcall TMainForm::TMainForm(TComponent* Owner)
:TForm(Owner)
[...]
Volendolo interpretare (spero) in C++ io direi che viene chiamato il
costruttore TMainForm della classe omonima a cui viene passato un puntatore
a TComponent di tipo Owner. Ma Owner ha un significato speciale? Quale?
La sintassi della riga successiva (":") che significa? E' C++ standard?
Per favore datemi qualche indicazione.
Vorrei inoltre sapere se c'é qualche tutorial online dove sono spiegati
questi aspetti. Io ho acquistato la guida della Apogeo di Kent Reisdorph ma
questi aspetti non sono per niente approfonditi.
Grazie
Camilla

 wrote in message
news:968965181.288229@aragorn...

Non conosco il C++ Builder , ma ho programmato in Delphi e la sintassi
sembra la stessa:
l'owner e' un altro oggetto di tipo TComponent che diventa il "Possessore"
dell'oggetto che stai creando e creandolo allochi memoria dianmica che poi
andrebbe eliminata.
Non so il C++ Builder , ma in Delphi gli oggetti creati hanno esistenza
globale (cioe' non vengono automaticamente distrutti quando esci dall'area
di validita', ma viene distrutto solo il puntatore) .
Quindi ogni oggetto creato ha un owner e questo garantisce che quando
distruggi un owner lui distrugge tutti i suoi "figli" automaticamente.
Giacomo


La libreria VCL del Builder è la medesima di Delphi e quindi Owner ha il
medesimo significato.
Per quanto riguarda ":TForm(Owner)" significa che nel costruttore di
TMainForm viene prima chiamato il costruttore della classe genitore passando
il parametro Owner. E' una forma standard del linguaggio C++ simile
funzionalmente all' inherited del Delphi / Object Pascal
Sergio Bianchi

Grazie a entrambi per la cortese risposta
Camilla

La sintassi della riga successiva (":") che significa? E' C++ standard?
Si', e' C++ standard ed indica il fatto che, prima di eseguire il
costruttore della classe TMainForm, viene eseguito il costruttore
della classe da cui essa deriva, ovvero TForm.
--
Andrea Laforgia (UIN 87230455)
----------------------------------------------------------
Non scrivetemi per e-mail, se non richiesto espressamente.
No replies in private e-mail, unless explicitly requested.
----------------------------------------------------------

 Spero di non essere OT. Non riesco a comprendere il significato di "Owner"
e
Di solito le librerie (MFC,VCL, OWL) hanno due tipi di 'possessioni':
- quella visuale, ovvero che finestra ha creato chi (A č parent di B),
- quella dei messaggi, ovvero che finestra processa i messaggi di chi (A č
owner di C),
Facciamo un esempio, con le finestre A e B:
A crea una finestra C e ne diventa parent (e quindi in automatico owner, che
crea una finestra ne diventa anche owner),
B deve processare i messaggi di C perchč A č solo una finestra contenitore
quindi con una chiamata tipo B.SetOwner(C) B diventa owner di C e riceve i
messaggi di notifica di C, mentre A non riceve piů niente (sebbene C sia
'attaccata' visualmente ad A).
Pensa a quando crei un oggetto OLE e lo metti una applicazione, la sua
toolbar di lavoro si attacca alla finestra principale e non direttamente
all'oggetto OLE, ma quando premi un bottone sulla toolbar l'azione viene
eseguita direttamente dall'oggetto OLE.
Se chiami:
A = applicazione,
B = oggetto OLE (creato da A)
C = toolbar di lavoro
hai l'esempio di sopra (piuttosto comune)
Spero di essere stato chiaro, mi scuso per la lunghezza.
Bax.