17

次のような 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 の内容が null かどうかは重要ではありません。

4

1 に答える 1

27

私が知る限り、このプログラムは構文的にも意味的にも正しいです。

の実装によっては、参照が null になる可能性がありますGetClassB()。したがって、技術的には、null 参照がそこで発生するのを待っている可能性があります。

ただし、の内容がGetClassB()次のようになっている場合:

return gcnew ClassB();

例外をスローするか成功することが保証されます。つまり、参照が誤って null になることはありません。

したがって、本当の答えは次のとおりです。場合によって異なりますが、null をチェックする必要はありません。

null の使用を確認するには:

if (b == nullptr)
{
}
于 2010-06-24T13:16:08.000 に答える