我知道我问的也不对。请帮助我更好地提出我的问题。
我有点难以将注意力集中在句柄上——在某些方面,它看起来像指针。但与指针不同,似乎我可以直接将值分配给句柄变量,它会影响底层数据值,而不是句柄本身。
测试代码清楚地表明,无论我使用句柄还是“取消引用”句柄来获取数据,我都会得到相同的值。显然,这不适用于非托管指针。我不明白什么?
#include <iostream>
int main()
{
int ^y;
int ^a, ^b, ^c;
long x;
y= gcnew int(100);
a=y;
b=y;
c=y;
c= gcnew int(200);
b= 300;
System::Console::WriteLine(y); // returns 100 (instead of something pointer-like)
System::Console::WriteLine(*y); // also returns 100
System::Console::WriteLine(a); // 100
System::Console::WriteLine(b); // 300
System::Console::WriteLine(c); // 200
x = static_cast<long>(y);
*y = 10;
System::Console::WriteLine(x); // 10
System::Console::WriteLine(y); // 10
System::Console::WriteLine(*y); // 10
}
编辑添加——我怀疑 WirteLine 可能已经为我完成了取消引用,但我预计静态转换不会长。这也与自动拆箱有关吗?