托管 C++ ^(句柄)-->它是什么以及它与引用和指针有何关系
托管 C++ 中的对象句柄(
例如:)
System::String^ str = gcnew System::String();
与普通 C++ 指针有什么区别?
另外它们与我们在 C# 中的引用有何关系?
What is the difference between a handle to an object in Managed C++
such as:
System::String^ str = gcnew System::String();
and the ordinary C++ pointers?
Also how do they relate to references we have in C#?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您不是在谈论(较旧的)托管 C++,而是在谈论 C++/CLI,对吧?
在 C# 中,您的代码相当于
在 C++/CLI 中,对象的句柄与 C# 中的引用相同 - 您有引用计数、垃圾收集器等。
另一方面,普通的 C++ 指针(在大多数情况下)是情况)指向非托管对象的指针。 (当然)您可以使用 C++ 指针来指向托管对象,就像在 C# 中使用指针一样(在不安全的代码中)。请参阅此处了解 C# 中指针的详细说明,以及此处了解有关 C++/CLI 中指针的一些详细信息。这些指针不由垃圾收集器处理。
You are not talking about (the older) Managed C++, but about C++/CLI, right?
In C#, your code is equivalent to
In C++/CLI, a handle to an object is just the same as a reference in C# - you have reference counting, garbage collector etc.
Ordinary C++ pointers, on the other hand, are (in most cases) pointers to unmanaged objects. You can (of course) have C++ pointers to managed objects, just the way you have pointers available in C# (in unsafe code). Look here for a detailed explanation of pointers in C#, and here for some details about pointers in C++/CLI. Those pointers are not handled by the garbage collector.