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++の上位互換ですから当然NULLが使えますが、こちらも nullptr をマネージ・アンマネージどちらにも使えます。
char* ptr = nullptr;
Object^ obj = nullptr;
ということでC++/CLIでも、いつもnullptrを使っていればOKです。
このnullptrというのはC++/CLIの独自拡張ですが、次期C++標準であるC++0xでも導入されるとか何とか。