Distruttore (informatica): differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Fix link |
m →Linguaggi garbage collected: Eliminato una d cacofonica |
||
(15 versioni intermedie di 12 utenti non mostrate) | |||
Riga 1:
{{F|
{{C|Come la voce sul costruttore, contiene imprecisioni ed elementi C++-centrici. Non è propriamente vero che il distruttore ha "lo scopo" di liberare risorse; non in tutti i modelli viene considerato "un metodo"; che debba essere necessariamente pubblico è sicuramente affermazione legata a qualche particolare linguaggio, ecc. Vedere la voce di en|informatica|giugno 2010}}
I '''distruttori''', in [[informatica]] e specificamente nella [[programmazione orientata agli oggetti]], sono degli eventi particolari che
Sono stati concepiti per liberare le risorse utilizzate dall'oggetto, definite dalla loro classe e create dal corrispondente [[costruttore (informatica)|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 (informatica)|costruttore]], non può accettare nessun tipo di parametro, perché se non chiamato esplicitamente, sarà il compilatore a inserire a fine programma la chiamata al distruttore. Per questo motivo, per ogni classe può esserci un solo distruttore, rendendo impossibile l'''[[overloading]]''.
<syntaxhighlight lang="cpp" line="1">
class A {int i;
~A() {}
Riga 22 ⟶ 21:
// A b(1); <----- non ammesso perché il distruttore è privato (error C2248: 'A::~A' : cannot access private member declared in class 'A')
}
</syntaxhighlight>
compila perfettamente ma impedisce che un oggetto di classe A venga istanziato sullo stack ma consente che venga
Esempio:
<
class A {int i;
static int count;
Riga 41 ⟶ 40:
b = A::Delete (a); // b=0
}
</syntaxhighlight>
=== Linguaggi ''garbage collected'' ===
Nei linguaggi che mettono a disposizione un ''[[
== Linguaggi di programmazione ==
===
In C++ l'implementazione esplicita del distruttore è solitamente necessaria nell'implementazione di classi che gestiscono risorse. In accordo alla [[regola del tre (C++)|regola del tre]], solitamente l'implementazione del distruttore è accompagnata dall'implementazione di un [[costruttore di copia]] e di un [[operatore di assegnamento]].
<syntaxhighlight lang="cpp" line="1">
class Point
{
Riga 59 ⟶ 61:
int y;
}
</syntaxhighlight>
===
<
public class Punto
{
Riga 72 ⟶ 74:
}
}
</syntaxhighlight>
===
====
Nella versione 4 (e precedenti) di PHP non esisteva il distruttore. Era presente una semplice gestione degli oggetti con l'uso dei [[
====
Nella versione 5 il nome della funzione deve essere
<
class Point
{
private $x;;
private $y;
public function __destructor ( )
Riga 90 ⟶ 92:
}
}
</syntaxhighlight>
== Voci correlate ==
*[[Costruttore (informatica)|Costruttore]]
*[[Programmazione orientata agli oggetti]]
== Collegamenti esterni ==
* {{FOLDOC|destructor|destructor}}
{{portale|informatica}}
[[Categoria:Programmazione]]
[[Categoria:Programmazione orientata agli oggetti]]
|