Как проверить «NULL ссылку на объект» в Managed C ++? - PullRequest
12 голосов
/ 24 июня 2010

Я сталкиваюсь с кодом 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 значение NULL, прежде чем получить доступ к его значению?Я пытался if(b == NULL), но он не работает.

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

PS: я только хочу знать, может ли само "Reference" быть здесь NULL.Является ли содержимое класса B нулевым, не важно.

1 Ответ

21 голосов
/ 24 июня 2010

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

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

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

return gcnew ClassB();

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

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

Для проверки на нуль используйте:

if (b == nullptr)
{
}
...