gpt4 book ai didi

c++-cli - 在 C++/CLI 中如何处理句柄?

转载 作者:行者123 更新时间:2023-12-02 06:46:08 26 4
gpt4 key购买 nike

我知道我问的也不是很对。请帮助我更好地形成我的问题。

我很难把注意力集中在句柄上——在某些方面,它看起来像指针。但与指针不同的是,我似乎可以直接为句柄变量赋值,而且它会影响底层数据值,而不是句柄本身。

测试代码清楚地表明,无论是使用句柄,还是“取消引用”句柄以获取数据,我都会得到相同的值。显然,这不适用于非托管指针。我有什么不明白的?

#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 可能已经为我完成了取消引用,但我预计静态转换为 long 不会。这也与自动拆箱有关吗?

最佳答案

令人遗憾的是 C++/CLI 允许这种语法。 int 类型是值类型,帽子用于引用类型。您的“y”变量不存储 int,它存储 System::Object。编译器在您分配时自动生成装箱指令。 Console::WriteLine() 在显示盒装 int 对象的值时没有问题。

经验法则:当它是类对象时使用帽子,对于简单值类型则省略它。避免引用类型的堆栈语义(省略帽子,以便它在范围结束时自动调用析构函数),直到您真正理解值和引用类型之间的区别以及为什么 Dispose() 很重要。

关于c++-cli - 在 C++/CLI 中如何处理句柄?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/467791/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com