我偶然发现了这段代码,我很自豪地去问作者这意味着什么.
Hashtable^ tempHash = gcnew Hashtable(iterators_); IDictionaryEnumerator^ enumerator = tempHash->GetEnumerator();
gcnew
使用它而不仅仅是简单的是什么,有多重要new
?(我也被插入符号困扰;我在这里问过这个问题.)
gcnew用于.NET引用对象; 用gcnew创建的对象会自动被垃圾收集; 将gcnew与CLR类型一起使用非常重要
gcnew
是一个操作符,就像new
操作符一样,除了你不必删除用它创建的任何东西.这是摹 arbage Ç ollected.您可以使用gcnew创建.Net托管类型,使用gcnew创建非托管类型.
声明类型时,脱字号'^'与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;
在描述托管对象时,我使用术语“指针”,因为就像C / C ++中的指针一样,可以将托管对象与“ nullptr”进行比较。C / C ++中的引用不能与“ nullptr”进行比较,因为它是现有对象的地址。
受管对象使用自动引用计数,这意味着当它们的引用计数为零时,它们将被自动销毁,尽管如果两个或多个无法访问的对象相互引用,则仍然会发生内存泄漏。请注意,自动引用计数并不是明智的自由表现,因此请明智地使用它。