Вот моя ситуация:
У меня есть объекты-оболочки .NET на уровне C ++ / CLI, которые содержат указатели на неуправляемые объекты C ++. Я реализовал финализатор так, чтобы он удалял неуправляемую память, указанную объектом-оберткой в сборщике мусора, и устанавливал указатель на ноль.
Вот проблема :
Я наблюдаю финализатор объекта-оболочки .NET, который вызывается дважды и пытается дважды удалить одну и ту же память, указывая, что я каким-то образом создал 2 объекта-оболочки .NET, которые выходят за пределы области видимости, уборка мусора, в то время как я все еще ожидаю, что объект оболочки находится в области видимости (эти объекты оболочки передаются в приложение VB.NET).
Вот мой вопрос:
Могу ли я в любом случае проверить значение дескриптора, чтобы я мог подтвердить, где создаются объекты-оболочки (копируются или как-то еще)? В настоящее время я смотрю на значения дескриптора (EG - 0x0014fe80), но вижу 3 разных значения, когда объект создается, добавляется в коллекцию и удаляется. Поэтому я не уверен, что GC просто перемещает вещи вокруг, и это один и тот же объект, или я на самом деле вижу 3 разных объекта, которые ссылаются на одну и ту же неуправляемую память. Я хотел бы разрешить дубликаты копий объектов, если это возможно, но я понимаю, что, вероятно, захочу реализовать какой-нибудь интеллектуальный указатель, чтобы этого не произошло.
Спасибо,
Ian