gcnew是什么?

问题描述 投票:0回答:3

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

Hashtable^ tempHash = gcnew Hashtable(iterators_);

IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();

什么是

gcnew
?使用它而不是简单地使用
new
有多重要? (我也被插入符号难住了;我问过这个问题在这里。)

.net c++-cli
3个回答
87
投票

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


54
投票

gcnew
是一个用于分配内存的运算符,就像
new
运算符一样,只不过您不需要
delete
使用它创建的任何内容;这是g套利c收集的。您可以使用
gcnew
创建 .Net 托管类型,使用
new
创建非托管类型。


9
投票

在声明类型时,插入符号“^”的作用与 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”进行比较,因为它是现有对象的地址。

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

© www.soinside.com 2019 - 2024. All rights reserved.