当前位置:  开发笔记 > IOS > 正文

你如何处理C++/CLI中的句柄?

如何解决《你如何处理C++/CLI中的句柄?》经验,为你挑选了1个好方法。

我知道我也不是在问这个问题.请帮我更好地形成我的问题.

我有点困难让我的思绪缠绕在手柄上 - 在某些方面,它看起来像指针.但与指针不同,似乎我可以直接将值赋给handle变量,它会影响底层数据值,而不是句柄本身.

测试代码清楚地表明,无论是否使用句柄,我都得到相同的值,或者如果我"取消引用"句柄来获取数据.显然,这不适用于非托管指针.我不明白的是什么?

#include 

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(y);
   *y = 10;

   System::Console::WriteLine(x); // 10
   System::Console::WriteLine(y); // 10
   System::Console::WriteLine(*y); // 10

  }

编辑添加 - 我怀疑WirteLine可能已经为我做了解除引用,但我原本预计静态强制转换不会.这与autounboxing有关吗?



1> Hans Passant..:

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

经验法则:当它是一个类对象时使用hat,对于简单的值类型省略它.避免引用类型的堆栈语义(省略hat,以便在作用域结束时自动调用析构函数),直到你真正理解值和引用类型之间的差异以及为什么Dispose()很重要.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有