Когда следует вызывать delete для выделенного объекта gcnew? - PullRequest
9 голосов
/ 17 августа 2011

Я читал следующий 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 Ответ

13 голосов
/ 17 августа 2011

delete в C ++ / CLI просто вызывает метод Dispose для управляемого объекта, если он реализует интерфейс System::IDisposable - если нет, онэффективно ноуп.Фактически, если вы попытаетесь вызвать метод Dispose для управляемого объекта самостоятельно, вы получите ошибку компилятора - delete - это принудительная идиома для удаления объекта.

Чтобы было понятно, этоне имеет ничего общего с управлением памятью, отмечая, конечно, что большинство финализируемых объектов получат GCed раньше, если они будут удалены.

...