Мой вопрос похож на этот: Управление деструкторами управляемых (C #) и неуправляемых (C ++) объектов
Но с изюминкой.
По сути, у меня есть граф объектов или иерархия, где классу Foo
принадлежат некоторые ссылки на несколько экземпляров класса Bar
(и т. Д.)
В .NET у меня есть управляемое представление Foo
, которое поддерживает IntPtr
для реального Foo
и использует P / Invoke для вызова методов на реальном Foo
(действующем в качестве прокси).
Моя управляемая реализация Foo
(прокси) реализует IDisposable
.
Прокси Foo
содержит свойство только для чтения типа List<Bar>
.
Мой управляемый Bar
прокси работает точно так же (относится к IntPtr
для реального Bar
, который он представляет).
Когда выпускается настоящий Foo
, он освобождает всех своих детей (включая все Bar
с).
Каков наилучший подход для работы с этим сценарием - поскольку я не хочу, чтобы управляемые клиенты прокси Foo
могли получить ссылку на Bar
и хранить ее дольше, чем они делают свою ссылку на Foo
прокси.