Есть две проблемы с вашим предложением.
Ложное чувство безопасности
Ваше предложение вызывает ложное чувство безопасности.Конечно, стандарт гарантирует, что если вы вызовете delete
по нулевому указателю, он не взорвется.Однако вы забыли один крошечный факт: на ваш объект нет ни одного указателя.
int* p = new int(8);
int* q = p;
delete p; p = 0;
delete q; // Undefined Behavior
Поэтому такая практика бесполезна.И поскольку ложное чувство безопасности хуже, чем отсутствие безопасности вообще , я на самом деле категорически против этого.В надежде, что люди подумают, прежде чем применять delete
nilly-willy.
, что подводит нас ко второму вопросу
Не смей ли ты когда-либо использовать delete
* 1020?*
delete
должен быть зарезервирован для разработчиков интеллектуальных указателей или других контейнеров .Применяется следующее:
- Только для экспертов
- (Эксперты) Не *
* Возможно, уже существует отлаженная реализация длячто вы пытаетесь достичь.
Существует куч существующих инструментов для управления памятью:
- вездесущие различные разновидности интеллектуальных указателей:
std::unique_ptr
или std::auto_ptr
(в зависимости от вашей версии C ++), std::scoped_ptr
, std::shared_ptr
(и его сравнение std::weak_ptr
, или их эквивалент boost / tr1) - вездесущие различные варианты контейнеров:
boost::array
, boost::scoped_array
, std::vector
(и со) - и менее известные, но полезные в ОО:
boost::ptr_vector
(и со) - есть даже
boost::intrusive_ptr
и библиотеку Boost Intrusive Containers или библиотеку Boost MultiIndex (с производной BiMap) - и, возможно, несколько других библиотек Boost, возможно, более специализированных, таких как Boost.Signals
С такиминеоднородная дикая природа, трудно подумать, что вы вдруг обнаружили новый способ использованияНг данные, которые настолько отличаются от того, что мы делаем, что вам нужно что-то еще.И если у вас есть, не стесняйтесь опубликовать его, мы поможем вам понять, как использовать эти инструменты в соответствии с вашей ситуацией (или дадим вам подсказки о том, как создать новую форму интеллектуального указателя).