Да, юридически разрешено членской функции выполнить delete this, при условии что соблюдены крайне строгие условия. Однако эта практика не рекомендуется в профессиональном коде из-за высокого риска ошибок.
Чтобы безопасно реализовать delete this, ты должен выполнить все следующие условия:
new (не new[], placement new, переменных на стеке, глобальных переменных или членов других объектов)delete this не обращается ни к каким полям объекта и не вызывает другие членские функцииthis нигде не используется после удаления — его не проверяют, не сравнивают, не выводят в лог и не приводят к другому типуthis после удаленияХоть это и технически разрешено, delete this считается плохой практикой в современном C++. Вместо этого рассмотри следующие альтернативы:
std::unique_ptr, std::shared_ptr) для автоматического управления памятьюЭти подходы исключают риск висячих указателей и делают код более поддерживаемым и безопасным при командной разработке.
Функция-член может безопасно вызвать delete this на объекте, выделенном с помощью placement new, при условии, что после этого не будут обращаться к переменным-членам.
Новый — ещё не проверен сообществом
Вы