perche il seguente codice:Cosa succede durante l'istruzione `delete this;`?
class foo
{
public:
foo(){}
~foo(){}
void done() { delete this;}
private:
int x;
};
Quello che sta accadendo (ed è valido?) Nei seguenti due opzioni:
opzione 1:
void main()
{
foo* a = new foo();
a->done();
delete a;
}
Opzione 2:
void main()
{
foo a;
a.done();
}
Sarà la seconda dichiarazione delete a;
a opt ion 1 causerà un'eccezione o un danneggiamento dell'heap?
L'opzione 2 causerà un'eccezione o un danneggiamento dell'heap?
Hai dimenticato le parentesi di apertura della classe per errore o è esattamente il codice copiato? – Neophile
@Nerds: a typo - fixed ... – NirMH
Interessante. Immagino che il primo causerebbe una corruzione segfault o heap, e il secondo farà tutto ciò che elimina un puntatore allo stack. – cha0site