Distruttore (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Etichetta: Sequenze di caratteri ripetuti da parte di un nuovo utente o IP
Riga 8:
 
ATTENZIONE: non è obbligatorio che un distruttore sia dichiarato public!
L'esempio: <br />
<br />
'''
class A {int i;<br />
~A() {} <br />
public: A(int v) {i=v;} <br />
};<br />
<br />
 
<nowiki>int main(int argc, char* argv[])
{
A *a = new A(2); // ok
// A b(1); <----- non ammesso perchè il distruttore è privato (error C2248: 'A::~A' : cannot access private member declared in class 'A')
}
</nowiki>
'''
 
compila perfettamente ma impedisce che un oggetto di classe A venga istanziato sullo stack ma consente che venga instaziato sullo heap. È ovvio tuttavia che un metodo di distruzione debba essere fornito all'utente il quale, a questo punto, può accettare anche dei parametri e tornare dei valori.
Esempio:
<nowiki>
'''
class A {int i;
static int count;
Riga 40:
b = A::Delete (a); // b=0
}
</nowiki>
'''
=== Linguaggi garbage collector ===
Nei linguaggi che mettono a disposizione un [[Garbage collection|garbage collector]], il distruttore è spesso inutile in quanto le risorse occupate da un oggetto vengono automaticamente liberate nel momento in cui non c'è più nessun riferimento all'oggetto stesso. In questi linguaggi è generalmente possibile utilizzare o definire ugualmente appositi metodi per ottenere il medesimo effetto, nei casi in cui si desideri disattivare il garbage collector, in quanto per alcuni task critici potrebbe risultare troppo inefficiente. Esempio di linguaggi di programmazione fra i più conosciuti ad utilizzare il meccanismo della garbage collection sono [[Java (linguaggio)|Java]] e la versione 2 di [[Objective-C]].