1

托管 C++ 中对象的句柄有什么区别

如:

System::String^ str = gcnew System::String();

和普通的 C++ 指针?

它们与我们在 C# 中的引用有什么关系?

4

1 回答 1

1

您不是在谈论(较旧的)托管 C++,而是在谈论 C++/CLI,对吗?

在 C# 中,您的代码相当于

System.String str=new System.String();

在 C++/CLI 中,对象的句柄与 C# 中的引用相同——你有引用计数、垃圾收集器等。

另一方面,普通 C++ 指针(在大多数情况下)是指向非托管对象的指针。您可以(当然)拥有指向托管对象的 C++ 指针,就像在 C# 中拥有可用指针一样(在不安全的代码中)。在此处查看C# 中指针的详细说明,并在此处查看有关 C++/CLI 中指针的一些详细信息。这些指针不由垃圾收集器处理。

于 2009-12-17T18:32:37.840 回答