Оператор delete
вызывает деструктор объекта, а затем освобождает базовую память, используемую объектом. Память должна выделена оператором new
. В delete this
удаленный объект является просто текущим объектом. В конструкции нет ничего особенного, это просто C ++.
В вашем примере память из стека, и, таким образом, вы входите в область неопределенного поведения (поскольку вы вызываете оператор delete
для объекта, который не был выделен с помощью оператора new
).
Обычно считается плохим замыслом вызывать delete this
, потому что объект не должен отвечать за свое время жизни. Обычно считается наилучшей практикой привлекать создателя объекта к ответственности за его уничтожение.
Однако есть одна ситуация, когда я лично нахожу это действительно полезным. Это происходит, когда вы общаетесь в потоке, отправляя сообщения. В этом случае, если сообщение отвечает за свой собственный срок жизни, его на самом деле безопаснее и легче написать, чем за него отвечает оригинальный поток.