什么是gcnew?

我偶然发现了这些代码,我很自豪地去问作者这是什么意思。

Hashtable^ tempHash = gcnew Hashtable(iterators_); IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator(); 

gcnew是什么,使用它而不是简单的new东西有多重要? (我也被这个脱口而出,我在这里问了一下 。)

gcnew是.NET参考对象; 使用gcnew创build的对象自动被垃圾收集; 在CLRtypes中使用gcnew是很重要的

gcnew是一个运算符,就像new运算符一样,除了不必删除用它创build的东西。 这是垃圾收集。 您使用gcnew创build.Net托pipetypes,并使用新创build非托pipetypes。

在声明一个types的时候,插入符号“^”在C / C ++中是“*”的;

 // pointer to new std::string object -> memory is not garbage-collected std::string* strPtr = new std::string; // pointer to System::String object -> memory is garbage-collected System::String^ manStr = gcnew System::String; 

在描述被pipe理对象时,我使用术语“指针”,因为被pipe理对象可以像C / C ++中的指针那样与“nullptr”进行比较。 C / C ++中的引用无法与“nullptr”进行比较,因为它是现有对象的地址。

托pipe对象使用自动引用计数,意味着它们在引用计数为零时自动销毁,尽pipe如果两个或多个不可访问的对象引用彼此,您仍然会有内存泄漏。 被警告说,自动引用计数不是免费的性能明智的,所以明智地使用它。