torutkのブログ

ソフトウェア・エンジニアのブログ

インスタンスのポインタがヌルでもメンバ関数呼び出しは実行される

ちょっと驚きなのですが、C++の実装(実現)をイメージすると何となく理解できそうな問題。

   SomeClass* pSome = 0; // SomeClassのインスタンスを格納するポインタはヌル
   pSome->doSomething(); // ここではアクセスバイオレーションは発生しない
      :
   void SomeClass::doSomething() {
       std::cout << "Enter doSomething" << std::endl; // ここは実行される
       std::cout << "member variable mes = " << mes << std::endl; // ここでアクセスバイオレーション発生 
   

doSomething()がvirtualの時は、doSomething呼び出しが実行される前にメモリバイオレーションが発生します。