C++とC++/CLIを比較してみます。
C++/CLIでハンドル型が追加されましたが、
deleteが要らないポインタ型という感じすんなり理解できると思います。
int *cpp = new int;
int ^cli = gcnew int;
//配列型
int *cppary = new int [10];
array<int> ^cliary = gcnew array<int>(10);
ほとんど使い勝手は変わりません
配列型になるとまるっきり違う構文になりますが、
STLのvectorを知っていればあまり不思議さはないでしょう。
int *cpp = NULL;
int ^cli = nullptr;
//C++/CLI限定の構文だけど、実はこれでもOK
int *cpp2 = nullptr;
NULLの入れ方です。
CにもC++にもNULLという予約語はないけど、その辺はスルー力を発揮!!
int a;
int &cpp = a;
int %cli = a;
次は参照型です。
C++/CLIでは&の代わりに%を使う追跡参照型があります。
C#にはない構文ですが、関数の引数につけるrefやoutに似ています。
int a;
int *cpp = &a;
int ^cli = %a;
実体型をポインタ型やハンドル型に変換する方法です。
*なら^に、&なら%に置き換えるだけです。
簡単!!
int vcpp = *cpp;
int vcli = *cli;
int &refcpp = *cpp;
int %refvcli = *cli;
なぜか、ハンドル型を実体型に変換する時は*のままです。
^を使うとコンパイルエラーが出ます。
理由はわかりませんが…
ハンドル型との排他的論理輪を取りたい人がいるんじゃないですかね!?