Distruttore (informatica): differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 8:
 
ATTENZIONE: non è obbligatorio che un distruttore sia dichiarato public!
L'esempio: <br />
<source lang="cpp">
<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')
}
</nowikisource>
 
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:
<source lang="cpp">
<nowiki>
class A {int i;
static int count;
Riga 40:
b = A::Delete (a); // b=0
}
</nowikisource>
 
=== 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]].