Я сталкиваюсь с некоторым 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 пустым, не важно.
Эта программа синтаксически и семантически правильна, насколько я могу судить.
Ссылка МОЖЕТ быть нулевой, в зависимости от реализации GetClassB()
. Таким образом, технически, там может быть нулевая ссылка, ожидающая своего часа.
Однако, если содержимое GetClassB()
выглядит следующим образом:
return gcnew ClassB();
, вы гарантированно либо вызовете исключение, либо успешно, а это означает, что ссылка никогда случайно не будет равна null.
Итак, реальный ответ таков: это зависит, но вы никогда не обязаны проверять значение null.
Чтобы проверить нулевое использование:
if (b == nullptr)
{
}