我知道我也不是在问这个问题.请帮我更好地形成我的问题.
我有点困难让我的思绪缠绕在手柄上 - 在某些方面,它看起来像指针.但与指针不同,似乎我可以直接将值赋给handle变量,它会影响底层数据值,而不是句柄本身.
测试代码清楚地表明,无论是否使用句柄,我都得到相同的值,或者如果我"取消引用"句柄来获取数据.显然,这不适用于非托管指针.我不明白的是什么?
#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
}
Run Code Online (Sandbox Code Playgroud)
编辑添加 - 我怀疑WirteLine可能已经为我做了解除引用,但我原本预计静态强制转换不会.这与autounboxing有关吗?
C++/CLI允许这种语法有点令人遗憾.int类型是值类型,hat用于引用类型.您的"y"变量不存储int,它存储System :: Object.分配时,编译器会自动生成装箱指令.Console :: WriteLine()在显示一个盒装int的对象的值时没有问题.
经验法则:当它是一个类对象时使用hat,对于简单的值类型省略它.避免引用类型的堆栈语义(省略hat,以便在作用域结束时自动调用析构函数),直到你真正理解值和引用类型之间的差异以及为什么Dispose()很重要.
| 归档时间: |
|
| 查看次数: |
3137 次 |
| 最近记录: |