続配列
http://d.hatena.ne.jp/akiramei/20050630#p1で、^(トラッキングハンドル)を付けないとスコープから外れたら自動的にDisposeが呼ばれることに大喜びしていましたが、配列の場合はどーなるんでしょうか?
#include "stdafx.h" using namespace System; ref class Foo { public: Foo () { Console::WriteLine("Foo"); } ~Foo() { Console::WriteLine("~Foo"); } !Foo() { Console::WriteLine("!Foo"); } }; void test1() { array<Foo^>^ arr = gcnew array<Foo^>(2); for (int i = 0; i < arr->Length; ++i) { arr[i] = gcnew Foo(); } for (int i = 0; i < arr->Length; ++i) { delete arr[i]; } } void test2() { array<Foo^>^ arr = gcnew array<Foo^>(2); for (int i = 0; i < arr->Length; ++i) { arr[i] = gcnew Foo(); } // 要素の後片づけはGCに丸投げ delete arr; } #if 0 // 妄想 void pseudo() { // 参照型クラスFooが^なしで指定されたら、Fooのコンストラクタを自動的に呼び出して欲しい array<Foo>^ arr = gcnew array<Foo>(3); // 配列を削除すると要素のデストラクタも呼ばれる delete arr; } #endif int main(array<System::String ^> ^args) { test1(); test2(); return 0; } /* 結果 Foo Foo ~Foo ~Foo Foo Foo !Foo !Foo */
pseudo関数のような動作を期待していたんですが、駄目なのかな・・・