Что происходит во время инструкции `delete this;`?

Пожалуйста, обратите внимание на следующий код:

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();
}

Будет ли второй удалить оператор; в варианте 1 вызовет исключение или повреждение кучи?

Приведет ли вариант 2 к исключению или повреждению кучи?

11
задан NirMH 11 January 2012 в 13:49
поделиться