Является ли допустимым конструкция delete this?

Рейтинг: 0Ответов: 1Опубликовано: 14.08.2023

Собственно, вопрос в заголовке. Более подробно, рассмотрим, к примеру, такой код:

class A
{
public:
A () = default;
~A () = default;
void destroy_me ()
{
  delete this;
}
};

int main ()
{
  A *a = new A ();
  a->destroy_me ();
  return 0;
}

Корректен ли код выше ? Считается ли это стандартом C++ как UB ? Просьба с цитатами или пунктами стандарта, сам пока не смог разобраться.

Ответы

▲ -1

Нужно cначала понимать как работает delete. Он вызывает деструктор объекта, потом вызывает системную функцию, отвечающую за освобождение памяти. Нельзя гарантировать, что объект был выделен на системной куче, ибо он может быть выделен кастомным аллокатором, или даже на стеке. Во всех этих 2-ух случаях будет UB.