When should delete be called on a gcnew allocated object?

时光毁灭记忆、已成空白 提交于 2019-11-30 03:07:05

问题


I was reading the following MSKB example and they perform a delete on a managed object.

I was under the impression you should never delete a garbaged collected object rather you must leave that to garbage collector.

What have I missed?

Method 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:


delete in C++/CLI merely calls the Dispose method on a managed object, if it implements the System::IDisposable interface – if it doesn't, it's effectively a noop. In fact, if you try to call the Dispose method on a managed object yourself, you'll get a compiler error – delete is the enforced idiom for disposing an object.

To be clear, it has nothing to do with memory management, noting of course that most finalizable objects will get GCed sooner if they're disposed.



来源:https://stackoverflow.com/questions/7087480/when-should-delete-be-called-on-a-gcnew-allocated-object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!