Пожалуйста, обратите внимание на следующий код:Что происходит во время `delete this;` statement?
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;
на opt ион 1 вызовет исключение или кучу коррупции?
Будет ли вариант2 вызывать исключение или разложение кучи?
Вы забыли открытые скобки для класса по ошибке или это точно скопированный код? – Neophile
@Nerds: опечатка - исправлена ... – NirMH
Интересно. Я бы предположил, что первый приведет к сбою segfault или кучи, а второй сделает все, что удаляет указатель на стек. – cha0site