Я использую GCHandle :: FromIntPtr, чтобы преобразовать неуправляемый указатель структуры в ссылку на управляемый объект, следуя примеру в msdn. Ниже приведен фрагмент кода:Должен ли я освободить дескриптор, возвращенный из GCHandle :: FromIntPtr?
GCHandle gch = GCHandle::FromIntPtr(IntPtr(someNativePtr));
MyManagedClass^ obj = static_cast<MyManagedClass^>(gch.Target);
Мой вопрос: должен ли я освободить gch?
UPDATE: Там огромная проблема в этом вопросе так же, как Medinoc говорил в своем комментарии: GCHandle :: FromIntPtr может не принять IntPtr, который указывает на неуправляемый объект !!! Поэтому вопрос совершенно бессмыслен.
@Medinoc, thx, где я могу найти документ, который вы только что упоминали? – SimonFisher
@ Medinoc, я не думаю, что пример msdn действительно означает, что мы можем использовать только FromIntPtr с intptr, возвращаемым ToIntPtr. – SimonFisher
В документе MSDN не говорится, что вы можете создать GCHandle из воздуха из случайного IntPtr, который даже не указывает на управляемый объект. В нем говорится, что вы можете конвертировать GCHandle в IntPtr и обратно в GCHandle для передачи его в качестве контекста через неуправляемые функции (которые по определению принимают только указатели или типы intptr_t). – Medinoc