Per dichiarare un membro dati che punta la suo
valore su Heap, la prima cosa da fare è dichiarare il dato
come un puntatore. Questo è ciò che viene fatto nella classe
Roditore con la seguente linea di codice, la quale dichiara m_pNome
come puntatore all'oggetto stringa.
String* m_pNome;
Nel costruttore della classe, viene allocata la
memoria su heap, e assegnato un valore a tale memoria, quindi
fissa il puntatore alla memoria. Questo è ciò che fa il costruttore
con la seguente linea di istruzione, la quale assegna la memoria
all'oggetto string, assegna un nome ad essa e punta m_pNome
al blocco di memoria scelto.
m_pNome = new string(nome);
Quando main() chiama testDistruttore(),
la funzione crea un oggetto Roditore. L'oggetto ha m_pNome
come membro dati che punta all'oggetto stringa equivalente a “Topp”,
memorizzato su heap.
Definire i Distruttori
Un distruttore è la funzione membro che
viene chiamata subito prima che l'oggetto sia distrutto. I
distruttori sono usati spesso dai programmatori per compiere una
necessaria pulizia prima che l'oggetto scompaia per sempre. Il
distruttore deve avere lo stesso nome della classe preceduto dal
carattere tilde (~). Un distruttore non può avere parametri o
restituire valori. Se non viene scritto dal programmatore, il
compilatore ne aggiunge uno di base per supplire alla mancanza.
Tuttavia il distruttore di default, quando si scrivono valori dei
dati membro su heap è lacunoso; pertanto è necessario
scrivere il proprio distruttore, in modo da liberare la
memoria su heap associata all'oggetto prima che esso scompaia,
evitando perdite di memoria. Questo è ciò che viene fatto per la
classe Roditore.
~Roditore() //distruttore
{ cout << “Chiamata
al distruttore\n”; delete m_pNome; }
Il distruttore mostra un messaggio e libera la
memoria al quale puntava m_pNome. Da notare che non viene assegnato
valore 0 a m_pNome, in quanto essa cessa di esistere dopo
l'operazione di delete, viene evitato il pericolo di un
puntatore appeso.
Nessun commento:
Posta un commento