C++ cli '的含义^';使用Cpp中的类名

C++ cli '的含义^';使用Cpp中的类名,c++-cli,managed-c++,C++ Cli,Managed C++,我正在阅读cpp中的一些代码,我发现一些代码如下 <classname>^ instancename ^instancename 。它有什么用 我尝试搜索,但没有得到任何答案。它表示一个托管指针,^指向一个垃圾收集对象(由框架处理) 您可以查看更多详细信息 在Visual C++ 2002和Visual C++ 2003中,使用α-GC*来声明 托管指针。用Visual C++ 2005中的^替换 示例ArrayList ^al=gcnew ArrayList() 它们的分配也不

我正在阅读cpp中的一些代码,我发现一些代码如下

<classname>^ instancename
^instancename
。它有什么用


我尝试搜索,但没有得到任何答案。

它表示一个托管指针,^指向一个垃圾收集对象(由框架处理)

您可以查看更多详细信息

在Visual C++ 2002和Visual C++ 2003中,使用α-GC*来声明 托管指针。用Visual C++ 2005中的^替换 示例ArrayList ^al=gcnew ArrayList()

它们的分配也不同,例如:

NativeObject* n = new NativeObject();
ManagedObject^ m = gcnew ManagedObject();
有关更多详细信息,请查看此

此示例显示如何在托管堆上创建引用类型的实例。此示例还显示,您可以用另一个句柄初始化一个句柄,从而在托管垃圾收集堆上对同一对象进行两次引用。请注意,将nullptr(C++组件扩展)分配给一个句柄不会将对象标记为垃圾收集

// mcppv2_handle.cpp
// compile with: /clr
ref class MyClass {
public:
   MyClass() : i(){}
   int i;
   void Test() {
      i++;
      System::Console::WriteLine(i);
   }
};

int main() {
   MyClass ^ p_MyClass = gcnew MyClass;
   p_MyClass->Test();

   MyClass ^ p_MyClass2;
   p_MyClass2 = p_MyClass;

   p_MyClass = nullptr;
   p_MyClass2->Test();   
}

句柄声明符(
^
,发音为
“hat”
,术语)修改类型说明符,表示当系统确定对象不再可访问时,应自动删除声明的对象

使用句柄声明器声明的变量的行为类似于指向对象的指针。但是,该变量指向整个对象,不能指向对象的成员,并且不支持指针算法。使用间接运算符(
*
)访问对象,使用箭头成员访问运算符(
->
)访问对象的成员


查看并获取更多信息。

这对我来说就像是一个按位排他性OR。你能在这里看到更多的上下文吗?这是微软的“托管C++”(它是C++和C语言之间的混合)。我相信他们不再鼓励使用C#,而是更倾向于使用C。可能的重复:本文将对此进行更详细的解释: