Distruttore (informatica)
Nella programmazione orientata agli oggetti, un distruttore è un particolare metodo che viene invocato automaticamente quando l'oggetto viene distrutto. È stato concepito per liberare le risorse utilizzate dall'oggetto, definite dalla sua classe e create dal corrispondente costruttore ed eventualmente le altre risorse allocate dinamicamente durante l'esecuzione dei metodi dell'oggetto stesso.
Uso
Nella creazione del codice di un distruttore occorre agire con particolare attenzione, in quanto per evitare fenomeni di memory leak si deve essere certi che tutte le strutture dati liberino correttamente la memoria da loro utilizzata compresa quella eventualmente utilizzata da altre strutture annidate al loro interno.
Il distruttore, a differenza del costruttore, non può accettare nessun tipo di parametro, perché se non chiamato esplicitamente, sarà il compilatore a inserire a fine programma la chiamata al costruttore. Per questo motivo, per ogni classe può esserci un solo distruttore, rendendo impossibile l'overloading.
È obbligatorio che un distruttore sia dichiarato public
Linguaggi garbage collector
Nei linguaggi che mettono a disposizione un 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 e la versione 2 di Objective-C.
Linguaggi di programmazione
class Point
{
public:
Point(); // Costruttore di default
~Point(); // Distruttore
// ... altri metodi ...
private:
int x;
int y;
}
Questo linguaggio possiede il garbage collection rendendo poco usati i distruttori
public class Punto
{
private float x;
private float y;
public ~Punto() // Distruttore
{ // ... codice qui ...
}
}
PHP 4
Nella versione 4 (e precedenti) di PHP non esisteva il distruttore. Era presente una semplice gestione degli oggetti con l'uso dei costruttori.
PHP 5
Nella versione 5 il nome della funzione deve essere __destructor
class Point
{
private $x;
private $y;
public function __destructor ( )
{
// ... codice qui ...
}
}