かってきままに!

わたくし、とんちゃんが日々の話題をかってきままに記していきます。

array

2010-09-24 17:26:30 | C++/CLI

#include <iostream>
#using <mscorlib.dll>


ref class A {

public:

 int field;
};


int main(array<System::String ^> ^args)
{

 array<int>^ objectI = gcnew array<int>(5);

 //array は配列の情報を持つオブジェクトのハンドル
 //c の配列の様に配列の先頭を示す物ではない
 //int は自動的に 0 で初期化される


 array<A^>^ objectA = gcnew array<A^>(5);

 //配列が参照クラスの時は、ハンドルを配列にもつ
 //この時点では配列の中身は nullptr なので中身も初期化する


 for each(A^% obj in objectA)
  obj = gcnew A();

 //配列の数分 gcnew で確保する
 //for each 内で A^% としないと objectA は初期化できない
 
 //A^ obj だと
 //1.  ローカル変数 obj に objectA 内の 配列の要素 A^ がコピーされる
 //2.  obj に gcnew で新しいハンドルが入る
 //3.  obj は objectA 内の配列の要素 A^ とは別の変数なので objectA の要素は初期化されない

 //A^% obj だと
 //1.  トラッキング参照 obj が objectA 内の 配列の要素 A^ のエイリアスとなる
 //2.  obj に gcnew で新しいハンドルが入る
 //3.  obj は objectA 内の配列の要素 A^ その物なので objectA の要素は初期化される


 for each(int% n in objectI)
  n++;

 //とにかく配列そのものに手を加えたい場合は参照をつかう

 
 getchar();
  
 return 0;

}


最新の画像もっと見る

コメントを投稿