2007/05/31(木)VC独自仕様?

^とかいう修飾子が増えてました.
ガベージコレクションできちんと追跡できるようになったポインタのようです.

VS 2005 EEドキュメント中の"C++ Language Reference"に説明が載っていますが,これって.NETの独自拡張ですよね?
CLR用,というかメモリ管理のための拡張が意外と多そうです.
勝手にメモリを解放してもらえるのは楽だけど,仕様がいろいろ追加されていて追いかけるのが大変.

メモ

1: ref class myclass {
2:     int i;
3: };
4: int main(void){
5:     myclass ^obj = gcnew myclass();
6:     int %ti = obj->i;
7:     ti = 100;
8:     return 0;
9: }

1:マネージ型としてクラスを定義
 こうしておくと,マネージドヒープ上にクラスを構築できる.
5:マネージ型はnewではなく,gcnewを使う
 受け取るポインタ側も*ではなく,^を使う
6:マネージドヒープ上の値を参照する場合,&ではなく,%になる

従来のC++で書くとこんな感じ.
メモリ削除をガベージコレクションに任せずに自分で削除する必要がある.

1: class myclass {
2:     int i;
3: };
4: int main(void){
5:     myclass *obj = new myclass();
6:     int &ti = obj->i;
7:     ti = 100;
8:     delete obj;
9:     return 0;
10: }