Обратите внимание на следующий код:
class foo
{
public:
foo(){}
~foo(){}
void done() { delete this;}
private:
int x;
};
Что происходит (и действительно ли оно?) в следующих двух вариантах:
вариант 1:
void main()
{
foo* a = new foo();
a->done();
delete a;
}
вариант 2:
void main()
{
foo a;
a.done();
}
Будет ли второй оператор delete a;
в варианте 1 вызвать повреждение исключения или кучи?
Будет ли вариант2 вызывать исключение или разложение кучи?