Distruttore classe C++

di il
1 risposte

Distruttore classe C++

Ciao a tutti,

ho da poco iniziato il corso di Algoritmi e Strutture Dati e in laboratorio stiamo iniziando a programmare in C++.

E' tutto molto semplice, ma una cosa mi ha lasciato un dubbio. Nell'ultima lezione sono stati trattati i Costruttori e i Distruttori.

Ho dei dubbi sui distruttori che appunto hanno il compito di liberare l'area di memoria occupata dall'oggetto una volta terminato il programma.

Il prof ci ha mostrato questo codice molto semplice:
#include <iostream> 
using namespace std;
class Coppia 
{ 
    double x; 
    double y; 
public: 
     Coppia(const double x0, const double y0)  { x = x0; y = y0; } 
     Coppia(const Coppia& A) { x = A.x; y = A.y; }
      Coppia() {x=0; y=0;}  
     void show() { cout << x << " " << y << endl ; }
     ~Coppia() { cout<<“Ho finito (”<<x <<“) (”<< y<<“)”<<endl; }

} ; 

int main() 
{ 
  Coppia c1 (13.4,2.7);
  Coppia c2 = c1; 
  Coppia c3;
  c1.show(); 
  c2.show();
  c3.show();
  return 0;
 } 
Ci sono i tre diversi tipi di costruttori e infine il distruttore con all'interno una cout con un messaggio di avviso.

I miei due dubbi sono questi:
1) come faccio a stampare il messaggio presente nel distruttore?
2) il distruttore viene utilizzato automaticamente oppure ci deve essere una chiamata all'interno del main per far si che l'area di memoria venga liberata?

Grazie per eventuali risposte.

1 Risposte

  • Re: Distruttore classe C++

    Cambia il tuo programma così
    
    int main()
    {
    {
      Coppia c1 (13.4,2.7);
     c1.show();
    }
    {
      Coppia c2 = c1;
     c2.show();
    }
    {
      Coppia c3;
       c3.show();
    }
      return 0;
    } 
    
    Così vedrai il messaggio dei distruttori. Il loro funzionamento è automatico e vengono chiamati quando la classe fa fuori contesto. Quindi noi non dobbiamo mai chiamarli. Siccome nel tuo esempio le variabili vanno fuori contesto solo all'uscita dal main, tu non vedi le chiamate ai distruttori.
Devi accedere o registrarti per scrivere nel forum
1 risposte