Oppure

Loading
11/08/09 21:41
puffin

Se creo una classe Complessi. E creo una istanza di questa classe in questo modo

Complessi c
Complessi *c=new Complessi();

che differenza c'è, tra usare e non usare la new?, voglio dire non viene allocata memoria nell'heap comunque?

Visto che è un oggetto, il distruttore non serve per deallocare memoria nell'heap?
aaa
11/08/09 21:47
manvb.net
No, nel primo caso viene allocata sullo stack(e non necessita di delete, perchè viene distrutta alla fine dello scope).
Il distruttore è solo un metodo che viene eseguito al momento della distruzione dell'oggetto, di solito viene usato per liberare la memoria allocata dalla classe(non la memoria della classe, non ti confondere), ma ci puoi mettere quello che vuoi.
aaa
11/08/09 21:51
puffin
Postato originariamente da manvb.net:

No, nel primo caso viene allocata sullo stack(e non necessita di delete, perchè viene distrutta alla fine dello scope).
Il distruttore è solo un metodo che viene eseguito al momento della distruzione dell'oggetto, di solito viene usato per liberare la memoria allocata dalla classe(non la memoria della classe, non ti confondere), ma ci puoi mettere quello che vuoi.


cioè cancella l'oggetto instanziato da Complessi dall'Heap
aaa
11/08/09 21:54
manvb.net
Postato originariamente da puffin:

cioè cancella l'oggetto instanziato da Complessi dall'Heap


Non l'oggetto stesso(che viene cancellato da delete), ma la memoria allocata dalle funzioni dell'oggetto, ti faccio un esempio:

class A
{
public:
char* b;
  void Alloca()
  {
    b = new char[50];
  }
  ~A()
  {
    delete [] b; //Nel distruttore distruggo b, ma non la classe stessa
  }
};
Ultima modifica effettuata da manvb.net 11/08/09 21:55
aaa
11/08/09 22:04
puffin
sisi
ogni tipo oggetto un suo distruttore (b) ma non distrugge la classe dentro il quale stà

Si si è logico
aaa