【发布时间】:2011-04-06 17:59:17
【问题描述】:
在 C++ 中创建托管与非托管的 .NET 对象实例有什么区别。也就是说,这些to语句有什么区别:
StreamWriter ^stream = gcnew StreamWriter(fileName);
对
StreamWriter *stream = new StreamWriter(fileName);
我的假设是,如果我使用 gcnew,分配给 StreamWriter 的内存将由垃圾收集器管理。或者,如果我使用指针(*)和 new 关键字,我将不得不调用 delete 来释放内存。
我真正的问题是:垃圾收集器会管理在 .NET 对象内部分配的内存吗?例如,如果一个 .NET 对象实例化了另一个对象,并且它超出了范围 - 即使我使用指针(*)和 new 关键字而不是 gcnew 和句柄(^),垃圾收集器也会管理该内存。
【问题讨论】:
-
您的问题无法回答,第二个 sn-p 根本不是有效代码。托管类的对象必须使用 gcnew 分配。
标签: visual-c++ pointers memory-management c++-cli