什么是gcnew?

时间:2008-10-14 19:17:39

标签: .net c++-cli

我偶然发现了这段代码,我很自豪地去问作者这意味着什么。

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

什么是gcnew以及使用它而不仅仅是new有多重要? (我也被插入符号困扰;我问过over here。)

3 个答案:

答案 0 :(得分:67)

gcnew用于.NET引用对象;用gcnew创建的对象会自动被垃圾收集;将gcnew与CLR类型一起使用非常重要

答案 1 :(得分:37)

gcnew是一个运算符,就像new运算符一样,除了您不必删除使用它创建的任何内容。它是 g arbage c 。您可以使用gcnew创建.Net托管类型,使用gcnew创建非托管类型。

答案 2 :(得分:1)

插入符号' ^'对于' *'在声明类型时用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;

我使用术语'指针'将托管对象描述为托管对象时,可以将其与“#”;“nullptr”进行比较。就像C / C ++中的指针一样。 C / C ++中的引用无法与' nullptr'因为它是现有对象的地址。

托管对象使用自动引用计数,这意味着当它们的引用计数为零时会自动销毁它们,但如果两个或多个无法访问的对象相互引用,则仍会发生内存泄漏。请注意,自动引用计数不是免费的性能,因此明智地使用它。