Как проверить “Ссылку несуществующего объекта” в Управляемый С++?

Я сталкиваюсь с некоторым MC ++ код как это:

__gc class ClassA
{
Puclic:
     ClassB GetClassB();
}

__gc class ClassB
{
 Public:
    int Value;
}

int main()
{
    ClassA^ a = gcnew ClassA();
    ClassB^ b = a->GetClassB();

    int c = b->Value;
}

Разве не важно проверять, является ли b ПУСТЫМ перед доступом к его значению? Я попробовал if(b == NULL), но это работа dosen't.

Или действительно не необходимо сделать проверку? однако я могу едва верить этому...

PS: Я только хочу знать, могла ли сама "Ссылка" быть ПУСТОЙ здесь. Является ли содержание класса B пустым, не важно.

13
задан Deduplicator 9 March 2015 в 20:58
поделиться

1 ответ

Эта программа синтаксически и семантически правильна, насколько я могу судить.

Ссылка МОЖЕТ быть нулевой, в зависимости от реализации GetClassB(). Таким образом, технически, там может быть нулевая ссылка, ожидающая своего часа.

Однако, если содержимое GetClassB() выглядит следующим образом:

return gcnew ClassB();

, вы гарантированно либо вызовете исключение, либо успешно, а это означает, что ссылка никогда случайно не будет равна null.

Итак, реальный ответ таков: это зависит, но вы никогда не обязаны проверять значение null.

Чтобы проверить нулевое использование:

if (b == nullptr)
{
}
22
ответ дан 1 December 2019 в 22:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: