Visual c++ ref类和gcnew的含义

Visual c++ ref类和gcnew的含义,visual-c++,c++-cli,managed-c++,Visual C++,C++ Cli,Managed C++,我不清楚关键字gcnew和ref class的用法。通常在C++中,当我们使用关键字新< /St>创建对象时,只为堆中分配的类的内存。正如我读到的关于VC++ref class的文章所述,当我们使用这个令牌创建类时,在对象创建之前在堆中为类分配内存。这是真的吗?如果假设这是真的,那么gcnew的用法是什么。gcnew是否对引用计数执行任何操作 下面的处理程序创建语句有什么区别 1)<class Name> ^<handler> = gcnew <class Nam

我不清楚关键字gcnewref class的用法。通常在C++中,当我们使用关键字<强>新< /St>创建对象时,只为堆中分配的类的内存。正如我读到的关于VC++ref class的文章所述,当我们使用这个令牌创建类时,在对象创建之前在堆中为类分配内存。这是真的吗?如果假设这是真的,那么gcnew的用法是什么。gcnew是否对引用计数执行任何操作

下面的处理程序创建语句有什么区别

1)<class Name>  ^<handler> = gcnew <class Name>;
2)<class Name>  <handler>;
1)^=gcnew;
2)  ;

我知道第一个类在堆中为该类分配内存。第二个问题,通常是在C++中,如果我创建了这样的处理程序,那么在栈中分配这个类的内存,就像我在C++中使用C++/CLI编程时使用令牌<强> REF类< /强>创建的类,然后在堆中分配的类的内存。我想知道第二个处理程序创建语句是否也在堆中创建内存

为清楚起见,您正在使用C++/CLI扩展(即托管C++)来处理.NET运行时及其垃圾收集内存堆,对吗?是的,您是正确的。只需输入关键字,告诉编译器您想要声明一种类型,其内存由垃圾收集器(ref类)管理,并从GC堆(gcnew)进行分配。与本机类型(类)相反,本机类型(类)的内存由您自己管理(新建、删除)。在C++/CLI程序中,可以同时执行这两项操作。请务必遵循至少一个广泛的教程,猜测它可能是痛苦的。@Hans Passant谢谢你的答案,为了更清楚,请回答如果处理程序创建像这样,让我说我有ref类A,我正在创建这样的处理程序,A^obj;简单地说,C++/CLI增加了对跟踪对象和垃圾收集器何时清理对象的更多支持。这就是^和gcnew(垃圾收集器New)的含义