我遇到了一些像这样的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:我只想知道“参考”本身在这里是否为NULL。 B类内容是否为空并不重要。
答案 0 :(得分:21)
据我所知,这个程序在语法和语义上都是正确的。
引用可能在那里为空,具体取决于GetClassB()
的实现。因此,从技术上讲,可能存在等待在那里发生的空引用。
但是,如果GetClassB()
的内容如下所示:
return gcnew ClassB();
您可以保证抛出异常或成功,这意味着引用永远不会意外为空。
所以,真正的答案是:它取决于你,但你永远不会要求检查是否为空。
检查空使用:
if (b == nullptr)
{
}