続配列

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関数のような動作を期待していたんですが、駄目なのかな・・・