PDA

Visualizza la versione completa : [C++] Distruttore classe


Sart
29-06-2012, 13:46
Ciao a tutti,
in un programma ho creato una classe principale e altre classi che estendono quella principale, ereditandone gli attributi.
La classe principale non ha il costruttore, ma tutti gli attributi e i metodi. Nelle altre classi invece ho definito solo il costruttore che inizializza gli attributi.


class Principale{
public:
//attributi e metodi
};

class Secondaria : public Principale{
public:
Secondaria(/*variabili varie*/);
};

Per istanziare un oggetto uso questa forma:


Principale *ogg = new Secondaria(/*...*/);


La mia domanda è: se io definisco un distruttore solo per la classe principale, quando vado ad eliminare dalla memoria le classi secondarie verrà usato quel distruttore o quello di default per la classe secondaria?

Who am I
29-06-2012, 14:24
Viene usato il distruttore della classe principale.
Perché in C++ per l' invocazione dei metodi si guarda il tipo del riferimento.
Devi fare un downcasting prima di chiamare il distruttore.

Sart
29-06-2012, 17:56
Per cui dovrò scrivere

delete (Principale*)ogg;

giusto?

shodan
29-06-2012, 19:19
Metti virtuale il distruttore nella classe base anche se è vuoto.


class Principale{
public:
virtual ~Principale() {}
//attributi e metodi
};

Principale *ogg = new Secondaria(/*...*/);

delete ogg;

Loading