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