Pagina 1 di 1
Distruttore C++: come funziona?
Inviato: sabato 12 maggio 2007, 14:35
da lup0z
Ciao a tutti!
Nn riesco a trovare nulla che mi spieghi la corretta sequenza di "distruzione" delle variabili in un programma in c++.
Mi spiego meglio: in una funzione vengono distrutte prima le variabili locali, l'oggetto anonimo di ritorno e successivamente i parametri attuali da sinistra a destra (dato che il costruttore, a meno della lista d'inizializzazione, allcoa da destra a sinistra).
ma nel complesso?
Tra variabili globali, statiche, classi metodi, funzioni esterne.....?
Grazie per l'aiuto!

Re: Distruttore C++: come funziona?
Inviato: sabato 12 maggio 2007, 15:38
da mediv
Bè la dstruzione delle variabile avviene esattamente nel ordine contrario di come vengono costruite(almeno quelle che non sono state create dinamicamente con la new, queste variabili sono di competenza del programmatore), in quanto le variabili istanziate vengono inserite nell'ordine di cotruzione nello stack, che non è altro che una pila.
Re: Distruttore C++: come funziona?
Inviato: sabato 12 maggio 2007, 19:20
da jack84
Bè la dstruzione delle variabile avviene esattamente nel ordine contrario di come vengono costruite
Sì anche perchè altrimenti ti perderesti dei puntatori essenziali per deallocare la memoria. Comincia deallocando i particolari più piccoli della tua struttura come nodi che contengono direttamente informazioni, per poi deallocare i vettori che contenevano il resto. Se procedi deallocando prima la struttura che contiene tutte le altre non sarà più possibile liberare quelle porzioni di memoria
Re: Distruttore C++: come funziona?
Inviato: domenica 10 giugno 2007, 19:30
da bite
Le variabili globali dichiarate in moduli (files) diversi purtroppo non hanno un ordine definito di distruzione. Se questo ha importanza, bisogna evitarle.
Re: Distruttore C++: come funziona?
Inviato: martedì 12 giugno 2007, 16:11
da thelo
lup0z ha scritto:
Tra variabili globali, statiche, classi metodi, funzioni esterne.....?
le variabili globali e le statiche non sono legate ad una istanza particolare...il loro ciclo di vita inizia e termina con quello del programma che le ha lanciate.
Se sono legate a funzioni esterne a classi, vengono istanziate alla chiamata della funzione e distrutte alla chiusura...