Null参照からメソッド呼び出し

先ずはサンプルから。

using namespace System;

ref class Calculator {
  int  dummy;
public:
  // インスタンスメンバにアクセスしない
  void add() {
    Console::WriteLine("add");
  }

  // インスタンスメンバにアクセスする
  void subtract() {
    dummy = 0;
    Console::WriteLine("subtract");
  }
};

void main() {
  Calculator^ c;

  // cはNull参照
  c = nullptr;

  c->add();
  c->subtract();
}

/* 結果
$ nulltest.exe
add

ハンドルされていない例外: System.NullReferenceException: 
オブジェクト参照がオブジェクト インスタンスに設定されていません。
   場所 main()
 */

cにはnullptrを入れているのにメンバ関数が呼び出せてしまいます。で、その関数がたまたまインスタンスメンバを使っていなければ問題なしです。しかし、これは呼び出したタイミングで例外投げるべきじゃないのかしら。この設計は見直して欲しいです。

ちなみに仮想関数にすればインスタンスメンバへアクセスしていなくても例外が飛びます。