Вызов delete this; внутри метода класса — крайне опасная штука и её нужно избегать. Этот подход пытается освободить объект изнутри его собственного метода, что создаёт кучу серьёзных проблем.
Неясность между стеком и кучей
delete this; попытается освободить память, которая никогда не выделялась, и программа упадётВисячие указатели
delete this; объект уже не существует в памятиКогда объект "совершает самоубийство", программа, которая его создала, никак не узнаёт об этом. С точки зрения вызывающего кода, объект всё ещё существует и остаётся в области видимости. Это создаёт опасное несовпадение между реальным состоянием объекта и тем, что предполагает программа.
Никогда не используй delete this; в продакшн-коде.
Если тебе нужно управлять динамическими объектами:
std::unique_ptr, std::shared_ptr) для автоматической очисткиУмные указатели убирают все риски, связанные с ручным управлением памятью, и это современный подход в C++.
Вызов delete this; на объекте, выделенном в стеке, приведет к неопределенному поведению, потому что компилятор не может различить выделение в heap и stack во время выполнения.
Новый — ещё не проверен сообществом
Вы