Обработка графиков прокси управляемых объектов для неуправляемых объектов - PullRequest
0 голосов
/ 02 сентября 2011

Мой вопрос похож на этот: Управление деструкторами управляемых (C #) и неуправляемых (C ++) объектов

Но с изюминкой.

По сути, у меня есть граф объектов или иерархия, где классу Foo принадлежат некоторые ссылки на несколько экземпляров класса Bar (и т. Д.)

В .NET у меня есть управляемое представление Foo, которое поддерживает IntPtr для реального Foo и использует P / Invoke для вызова методов на реальном Foo (действующем в качестве прокси).

Моя управляемая реализация Foo (прокси) реализует IDisposable.

Прокси Foo содержит свойство только для чтения типа List<Bar>.

Мой управляемый Bar прокси работает точно так же (относится к IntPtr для реального Bar, который он представляет).

Когда выпускается настоящий Foo, он освобождает всех своих детей (включая все Bar с).

Каков наилучший подход для работы с этим сценарием - поскольку я не хочу, чтобы управляемые клиенты прокси Foo могли получить ссылку на Bar и хранить ее дольше, чем они делают свою ссылку на Foo прокси.

Ответы [ 2 ]

0 голосов
/ 26 октября 2011

Я только что реализовал простую схему подсчета ссылок.

Я надеялся, что будет какой-то другой путь, но, в конце концов, это было просто и было действительно правильным решением.

0 голосов
/ 07 сентября 2011

Возможно, я слишком упрощаю это, но ваш Bar (прокси) класс должен иметь метод Dispose, который вызывается родительским / владельцем Foo классом. И, как и во многих классах, после удаления объекта Bar он должен установить для внутреннего флага m_disposed значение true и вызвать исключение ObjectDisposed, если какой-либо из его методов будет использован позднее. Вас не должно волновать, есть ли у клиента ссылка на управляемый объект Bar, если его внутренние неуправляемые ресурсы были очищены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...