我正在阅读以下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;
答案 0 :(得分:13)
delete
只调用托管对象上的Dispose
方法,如果它实现了System::IDisposable
接口 - 如果没有,则实际上是一个noop。实际上,如果您尝试自己在托管对象上调用Dispose
方法,则会出现编译器错误 - delete
是处置对象的强制惯用法。
要清楚,它与内存管理无关,当然注意到大多数可终结的对象如果被处理掉的话会更快得到GC。