何时应该在gcnew分配的对象上调用delete?

时间:2011-08-17 02:54:30

标签: visual-studio-2008 c++-cli

我正在阅读以下MSKB示例,他们在托管对象上执行删除。

我的印象是你永远不应该删除一个带有垃圾的收集对象,而你必须把它留给垃圾收集器。

我错过了什么?

方法4

 //#include <msclr/marshal.h>
 //using namespace msclr::interop;
 marshal_context ^ context = gcnew marshal_context();
 const char* str4 = context->marshal_as<const char*>(str);
 puts(str4);
 delete context;

1 个答案:

答案 0 :(得分:13)

C ++ / CLI中的

delete只调用托管对象上的Dispose方法,如果它实现了System::IDisposable接口 - 如果没有,则实际上是一个noop。实际上,如果您尝试自己在托管对象上调用Dispose方法,则会出现编译器错误 - delete是处置对象的强制惯用法。

要清楚,它与内存管理无关,当然注意到大多数可终结的对象如果被处理掉的话会更快得到GC。