とある関数の中身を見てみると、面白いメソッドがありました。
void Func(HogeProxy* pHogeProxy)
{
HogeFunc(pHogeProxy->GetHoge());
}
void HogeFunc(Hoge* pHoge)
{
// pHoge を使ってほげほげする
// pHoge は NULL でも構わない
}
proxy クラスを使って HogeFunc にアクセスしているだけです。
しかし、HogeFunc() の説明に NULL が入っていても構わないという記述があるので、pHogeProxy が NULL の場合のチェックが必要です。
つまり、
void Func(HogeProxy* pHogeProxy)
{
HogeFunc(pHogeProxy == NULL ? NULL : pHogeProxy->GetHoge());
}
こうする必要があるのです。
が、pHogeProxy は NULL チェックを行っていません。
これは不具合か?と思ったのですが、念のため HogeProxy::GetHoge() の中身を見てみると……
Hoge* HogeProxy::GetHoge()
{
this == NULL ? NULL : m_pHoge;
}
this が NULL かどうかをチェックするなんて……こんな書き方ありかYO!