
![]() |
|||
|
ヌルポインタを表現するとき、C言語では NULL マクロを使うのが一般的です。このマクロは (void *)0 と定義されている場合が多いでしょう。そのとき、C++ では次のコードはエラーになります。 |
|||
|
||||
|
これは、void * 型から他のポインタ型への代入がタイプセーフ(型安全)ではないためです。C では許されていた代入なのですが、より安全性が確保された C++ では禁止されています。 このエラーを回避するために
と定義し直す方法が考えられますが、そうすると思わぬ弊害が起こってしまいます。次の例を見てください。 |
|||
|
||||
|
この例では、関数 Func がオーバーロードされています。main 関数からこの Func を呼び出していますが、パラメータが NULL なので、明らかに2つめの int * をパラメータとする Func が呼び出されることを意図したコードです。しかし実際はそうなりません。NULL は 0 と定義されていて、0 は整数と解釈されるのです。 このような失敗を防ぐためには、NULL マクロを使わないことです。いままでこのマクロに親しんできた人には少し辛い別れかもしれませんが、これからは NULL と書くかわりに 0 と書きましょう。 |
|||
(「オブジェクト指向のはなし」は1999年2月から2000年4月にかけて作成されたコンテンツです。)