Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80

    [C++] Distruttore classe

    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.
    codice:
    class Principale{
        public:
            //attributi e metodi
    };
    
    class Secondaria : public Principale{
        public:
            Secondaria(/*variabili varie*/);
    };
    Per istanziare un oggetto uso questa forma:
    codice:
    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?

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    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.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    80
    Per cui dovrò scrivere

    delete (Principale*)ogg;

    giusto?

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Metti virtuale il distruttore nella classe base anche se è vuoto.
    codice:
    class Principale{
        public:
           virtual ~Principale() {} 
            //attributi e metodi
    };
    
    Principale *ogg = new Secondaria(/*...*/);
    
    delete ogg;
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.