﻿# V3211\. Unity Engine\. The operators '?\.', '??' and '??\=' do not correctly handle destroyed objects derived from 'UnityEngine\.Object'\.

Анализатор обнаружил потенциальную ошибку, связанную с тем, что объект производный от UnityEngine\.Object был использован с оператором условного null \(?\.\) или null\-объединения \(?? и ??\= \)\.

Согласно [документации Unity](https://docs.unity3d.com/6000.0/Documentation/ScriptReference/Object.html#:~:text=null-conditional%20operator%20(%3F.)%20and%20the%20null-coalescing%20operator%20(%3F%3F)%20are), не рекомендуется использовать операторы `?.`, `??` и `??=`\. Поскольку их нельзя перегрузить, они не учитывают возможность уничтожения объектов, производных от `UnityEngine.Object`\. Вследствие чего, проверка может иметь некорректный результат\.

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

```cpp
class CustomComponent: MonoBehaviour
{
  public bool HitConfirm(....)
  {  
    Projectile bullet;
    ....
    if(....)
      Destroy(bullet);
    ....
    if(bullet?.isJammed())
    {....}
  }
}
```

В данном случае при обращении к `bullet` проверка с помощью оператора условного null \(`?.` \) не будет учитывать возможность, что объект может быть уничтожен, так как этот оператор нельзя перегрузить\.

Чтобы это исправить, рекомендуется использовать проверку с помощью оператора `==` или `!=`\.

Исправленный вариант:

```cpp
class CustomComponent: MonoBehaviour
{
  public bool HitConfirm(....)
  {  
    Projectile bullet;
    ....
    if(....)
      Destroy(bullet);
    ....
    if(bullet != null ? bullet.isJammed() : null)
    {....}
  }
}
```