ハンドルは操縦しづらい

参照型オブジェクトの場合、T^は参照がボックス化されて、値型の場合はT^は値がボックス化される、とでも覚えればいいのか?
ところで、

value struct Bar {
	int i;
};

void foo(Bar^ bar) {
	bar->i++;
}

int main(array<System::String ^> ^args)
{
	Bar a;
	a.i = 100;
	Bar^ b = %a;

	foo(%a);
	foo(b);

	Console::WriteLine(a.i);
	Console::WriteLine(b->i);

	return 0;
}

aとbのメンバーの値が違うのは何故?ひょっとして、ボックス化ってコピーを作っているのか?
で、Bar^ = Bar^ はハンドルをコピーしているだけということか?
つーことはアンボックスもコピーする…のは当然か。実体に対して代入演算子を適用しているわけだから。
.netでGUI作る分にはとてもいいが、未だにこの辺に慣れない。