ヌルポインタ

C#使っているくせにポインタが絡むことばかりやっていて、なんだかなあと思う今日この頃。

C#

unsafeコード中でのヌルポインタについて。C/C++では、NULLすなわち0という整数値をそのままポインタ変数に代入できましたが、C#は型にうるさいのでできません。キャストすることになります。

byte* ptr = (byte*)0;

またはこのように。

byte* ptr = (byte*)IntPtr.Zero;


ところが実は、ポインタ変数には null を代入できます。

byte* ptr = null;

もちろん if(ptr == null) のように比較もできます。ということで、マネージ・アンマネージ関係なくnullを使えばよいということで、めでたしめでたし。

C++/CLI

C++/CLIC++の上位互換ですから当然NULLが使えますが、こちらも nullptr をマネージ・アンマネージどちらにも使えます。

char* ptr = nullptr;
Object^ obj = nullptr;

ということでC++/CLIでも、いつもnullptrを使っていればOKです。


このnullptrというのはC++/CLIの独自拡張ですが、次期C++標準であるC++0xでも導入されるとか何とか。