如何在托管C++中检查"NULL对象引用"?

Ech*_*cho 13 managed-c++ c++-cli object-reference visual-c++

我遇到了一些像这样的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;
}
Run Code Online (Sandbox Code Playgroud)

在访问其值之前检查b是否为NULL不重要吗?我试过了if(b == NULL),但它不起作用.

或者它真的没有必要进行检查?但我简直不敢相信......

PS:我只想知道"参考"本身在这里是否为NULL.B类的内容是否为空并不重要.

Joh*_*zen 22

据我所知,这个程序在语法和语义上都是正确的.

参考COULD在那里为空,具体取决于实现GetClassB().因此,从技术上讲,可能存在等待在那里发生的空引用.

但是,如果内容GetClassB()看起来像这样:

return gcnew ClassB();
Run Code Online (Sandbox Code Playgroud)

您可以保证抛出异常或成功,这意味着引用永远不会意外为空.

所以,真正的答案是:它取决于你,但你永远不需要检查null.

要检查空使用:

if (b == nullptr)
{
}
Run Code Online (Sandbox Code Playgroud)