﻿# V809\. Verifying that a pointer value is not NULL is not required\. The 'if \(ptr \!\= NULL\)' check can be removed\.

Анализатор обнаружил код, который можно упростить\. Функция 'free\(\)' и оператор 'delete' корректно обрабатывают нулевой указатель\. Поэтому можно удалить проверку, в которой проверяется указатель\.

Рассмотрим пример:

```cpp
if (pointer != 0)
  delete pointer;
```

В данном случае проверка является избыточной, поскольку оператор 'delete' корректно обработает нулевой указатель\. Пример исправленного кода: 

```cpp
delete pointer;
```



Конечно, данное исправление нельзя назвать настоящей оптимизацией\. Однако это позволяет удалить лишнюю строку, что сделает код короче и легче для понимания\.



Есть только один случай, когда проверка указателя имеет смысл\. Если функция 'free\(\)' или оператор 'delete' вызывается ОЧЕНЬ много раз\. И при этом, ПОЧТИ ВСЕГДА указатель равен нулю\. Если в пользовательском коде будет проверка, то не произойдет вызов системных функций\. Это может даже чуть сократить время работы\.

Но на практике, нулевой указатель почти всегда свидетельствует о какой\-то ошибке\. В нормальном режиме работы программы указатели в 99\.99% случаев будут ненулевыми\. Поэтому проверку лучше удалить\.



Стоит отметить, что данное предупреждение применимо и для других функций, которые корректно обрабатывают переданный нулевой указатель, например '[CoTaskMemFree](https://docs.microsoft.com/en-us/windows/win32/api/combaseapi/nf-combaseapi-cotaskmemfree)'\.