Оба, проверка для nullptr
и назначения nullptr
после delete
не нужна и, следовательно, не должна быть в этом примере.
От cppreference on delete
(выделите мое):
Для первой формы (не массива) выражение должно быть указателем на тип объекта или типом класса, контекстуально неявно преобразуемым в такой указатель и его значение должно быть либо нулевым , либо указателем на объект, не являющийся массивом, созданным новым выражением, либо указателем на базовый подобъект объекта, не являющегося массивом, созданным новым выражением.
[...]
Если выражение не является нулевым указателем и функция освобождения не является уничтожающим удалением (начиная с C ++ 20), выражение удаления вызывает деструктор (если есть) для уничтожаемого объекта или для каждого уничтожаемого элемента массива (начиная с последнего элемента до первого элемента массива).
Вызов delete
на nullptr
ничего не делает.
Назначение nullptr
после delete
в вашем примере бессмысленно, если в деструкторе нет другого кода, который проверяет m_v
на наличие nullptr
или нет. После запуска деструктора m_v
больше не существует.
PS: Это действительно не стиль. Код, который не имеет возможности сделать что-то полезное, не должен быть написан. На самом деле без обид, но выполнение проверки для nullptr
и установка указателя на nullptr
можно рассматривать как car go культовое программирование .