Что-то еще, чтобы рассмотреть:
, поскольку delete
вызывает деструктор внутри себя, это ошибка для обоих, т. е. вызов деструктора, а затем удаление. Итак, следующий код:
Foo* px = new Foo;
// …
px->~Foo();
delete px;
Выдает неприятную ошибку. В зависимости от действий, предпринятых в фактическом деструкторе, это может остаться незамеченным в течение некоторого времени, поскольку компилятор фактически разрешает этот код. Это может привести к тонким, труднодоступным ошибкам.