Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75

    [C++] Chiarimento distruttori

    Buongiorno,
    ho alcuni dubbi sui distruttori:
    1) Se non implemento alcun distruttore quello generato dal compilatore (ovvero quello di default) cosa fa?

    2) Se in una classe metto solo la dichiarazione del distruttore ma non lo implemento questo si comporta come quello di default o non fa nulla?

    Ad esempio:

    codice:
    class Classe
    {
        metodi e attributi
    
        ...
    
        ~Classe(); //questo distruttore lo dichiaro ma non lo implemento
    }
    Quando richiamerò il distruttore ~Classe() questo si comporterà come il costruttore di default?

  2. #2
    1. Il distruttore di default equivale ad un distruttore vuoto (di suo non fa niente, ma comunque vengono richiamati i distruttori dei campi della classe e delle classi base).
    2. Ottieni un errore in fase di linking, dal momento che dichiarando il distruttore dici che da qualche parte è implementato, mentre di fatto non lo implementi.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75
    Originariamente inviato da MItaly
    1. Il distruttore di default equivale ad un distruttore vuoto (di suo non fa niente, ma comunque vengono richiamati i distruttori dei campi della classe e delle classi base).
    2. Ottieni un errore in fase di linking, dal momento che dichiarando il distruttore dici che da qualche parte è implementato, mentre di fatto non lo implementi.
    Grazie mille per la risposta, quindi se io volessi riprodurre il distruttore di default dovrei dichiararlo e lasciare l'implementazione vuota praticamente {} giusto?

  4. #4
    Esattamente, anche se come l'hai scritto tu non serve a molto (se voglio un distruttore identico a quello di default tanto vale lasciare che lo crei il compilatore ); d'altra parte si fa spesso una cosa simile se si vuole avere un distruttore analogo a quello di default (perché non c'è niente da distruggere effettivamente) ma serve che sia virtuale (requisito fondamentale se la classe è polimorfica e ci si aspetta che le classi derivate implementino un loro costruttore); in tal caso si scrive:
    codice:
    class MiaClasse
    {
        // ...
    public:
        // ...
        virtual ~MiaClasse() {}
    };
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    75
    Ok grazie mille

  6. #6
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.