Vediamo alcune delle differenze di base tra costruttore e distruttore con l'aiuto della tabella di confronto
Grafico comparativo:
Base per il confronto | Costruttore | Distruttore |
---|---|---|
Scopo | Alloca la memoria a un oggetto. | Depone la memoria di un oggetto. |
Dichiarazione | class_name (argomenti eventuali) {}; | ~ class_name (nessun argomento) {}; |
argomenti | Il costruttore accetta argomenti | Il distruttore non accetta alcun argomento. |
chiamata | Il costruttore viene chiamato automaticamente, mentre l'oggetto viene creato. | Il distruttore viene chiamato automaticamente, quando il blocco viene chiuso o il programma termina. |
Lavoro | Il costruttore consente all'oggetto di inizializzare parte del suo valore prima che venga utilizzato. | Il distruttore consente all'oggetto di eseguire codice al momento della sua distruzione. |
Ordine di esecuzione | I costruttori sono chiamati in ordine successivo. | I distruttori vengono chiamati in ordine inverso rispetto al costruttore. |
Nei numeri | Ci può essere più costruttore nella classe. | Ma c'è sempre un singolo distruttore nella classe. |
Copia il costruttore | Il costruttore di copie consente a un costruttore di dichiarare e inizializzare un oggetto da un altro oggetto. | Nessun concetto del genere. |
Sovraccarico | I costruttori possono essere sovraccaricati. | Il distruttore non può essere sovraccaricato. |
Definizione di Costruttore:
Un costruttore è fondamentalmente una funzione membro di classe, che inizializza l'oggetto e alloca la memoria ad esso. I costruttori possono essere facilmente identificati come sono dichiarati e definiti con lo stesso nome di quelli della classe. Un costruttore non ha alcun tipo di ritorno; quindi, non restituiscono nulla, nemmeno "vuoto". Un costruttore è sempre definito nella sezione pubblica di una classe.
Ci possono essere più costruttori in una classe; possono essere distinti in base al numero e al tipo di argomenti passati. Se ci sono più costruttori in una classe; costruttore implicito (costruttore del nulla-fare) deve essere definito insieme a loro; non fa altro che, soddisfa il compilatore.
I costruttori possono anche essere definiti con gli argomenti predefiniti. Mentre, inizializzano anche l'oggetto "dinamicamente". I costruttori non possono essere ereditati, né possono essere virtuali ma, possono essere sovraccaricati. Non possono essere indirizzati al loro indirizzo.
Implementazione del costruttore:
classe Const {int a, b; public: Const () {// costruttore con nessun parametro a = 0; b = 0; } Const (int c, int d) {// costruttore con parametro a = c; c = d; }}; int main () {Const C1; C2 (10, 20); // questa istruzione invoca il costruttore}
Quando viene creato C1, un costruttore senza parametri viene eseguito, poiché C1 non passa alcun parametro. Mentre, quando viene creato C2, viene eseguito un costruttore con parametro, in quanto sta passando due interi al costruttore.
Definizione di Destructor:
Un Destructor è anche una funzione membro di una classe, che rilascia la memoria allocata a un oggetto. È definito con lo stesso nome di quello di una classe, preceduto da un simbolo tilde (~). I distruttori vengono sempre chiamati nell'ordine inverso dei costruttori.
C'è sempre un singolo distruttore in una classe, in quanto non accetta alcun argomento. Gli oggetti locali vengono distrutti non appena il controllo dell'esecuzione ha lasciato il blocco; d'altra parte, gli oggetti globali vengono distrutti quando l'intero programma termina. Un distruttore viene chiamato implicitamente da un compilatore. Se le classi sono ereditate e una classe è derivata dalla classe genitore e sia la classe figlia che una classe genitrice hanno distruttori; quindi, il distruttore della classe derivata viene chiamato per primo, seguito dal distruttore della classe genitore.
Implementazione di Destructor:
classe Const {int a, b; public: Const (int c, int d) {// costruttore con parametro. a = c; c = d; cout << "valore di aeb" <Quando viene creato l'oggetto C1, viene richiamato un costruttore con due parametri di tipo intero e il membro "a, b" viene inizializzato e il valore di "a, b" viene stampato. Dopo che quel distruttore viene richiamato e stampa il messaggio "l'oggetto C1 viene distrutto".
Differenza chiave tra costruttori e distruttori
- Lo scopo principale di un costruttore è di allocare memoria agli oggetti quando vengono creati mentre, lo scopo principale di un distruttore è di deallocare la memoria dell'oggetto quando viene distrutto.
- Un costruttore può accettare gli argomenti in quanto gli argomenti possono essere utilizzati per inizializzare i membri dati della classe. Un distruttore non accetta argomenti poiché la sua unica funzione è quella di deallocare la memoria dell'oggetto.
- Un costruttore viene chiamato quando viene creato un oggetto. D'altra parte, un distruttore viene chiamato quando un programma viene terminato o il programma esce dal blocco in cui viene creato l'oggetto.
- Generalmente un costruttore viene utilizzato per inizializzare i membri dei dati della classe, mentre un distruttore viene utilizzato per consentire all'oggetto di eseguire un'azione prima che venga distrutto.
- I costruttori vengono eseguiti nell'ordine successivo, il che significa che se esiste una classe derivata che eredita la classe base e l'oggetto della classe derivata viene creato, chiamerà prima il costruttore della classe base e poi il costruttore della classe derivata. D'altra parte, il distruttore della classe derivata viene chiamato prima e quindi la classe base indica che un distruttore viene eseguito nell'ordine inverso del costruttore.
- In classe, ci possono essere più costruttori che sono identificati dal numero di argomenti passati. In classe, c'è solo un distruttore.
- Esiste un concetto di costruttore di copie che consente a un oggetto di essere inizializzato da un altro oggetto mentre il distruttore non ha tale concetto.
- I costruttori possono essere sovraccarichi per eseguire azioni diverse sotto il nome dello stesso costruttore, mentre i distruttori non possono essere sovraccaricati.
Conclusione:
Oltre alla somiglianza, che costruttore e distruttore sono la funzione membro speciale di una classe, e possiedono lo stesso nome, la differenza fondamentale tra entrambi è che "costruttore" è chiamato al momento dell'allocazione della memoria e "distruttore" è chiamato al tempo di deallocazione della memoria degli oggetti. Entrambi, costruttore e distruttore sono chiamati implicitamente dal compilatore anche se non sono definiti nella classe.