Установка указателя на 0 (который является «нулевым» в стандартном C ++, определение NULL из C несколько отличается) позволяет избежать сбоев при двойном удалении.
Обратите внимание на следующее:
Foo* foo = 0; // Sets the pointer to 0 (C++ NULL)
delete foo; // Won't do anything
Принимая во внимание:
Foo* foo = new Foo();
delete foo; // Deletes the object
delete foo; // Undefined behavior
Другими словами, если вы не установите удаленные указатели на 0, у вас возникнут проблемы, если вы делаете двойное удаление. Аргумент против установки указателей на 0 после удаления может заключаться в том, что это просто маскирует двойные ошибки удаления и оставляет их необработанными.
Лучше всего не иметь ошибок двойного удаления, но в зависимости от семантики владения и жизненных циклов объектов на практике это может быть трудно достичь. Я предпочитаю замаскированную ошибку двойного удаления, а не UB.
Наконец, в качестве справочного материала по управлению распределением объектов, я предлагаю вам взглянуть на std::unique_ptr
для строгого / единичного владения, std::shared_ptr
для совместного владения или другой реализации интеллектуального указателя в зависимости от ваших потребностей.