У меня есть неуправляемый класс и класс ref, который логически связан:
public ref class RefBlah
{
~RefBlah();
!RefBlah();
internal:
UnManagedBlah* m_unmanaged;
}
public class UnManagedBlah
{
public:
gcroot<RefBlah^> refBlah;
}
Класс RefBlah всегда создает экземпляр UnManagedBlah , который содержит ссылку на объект, который его создал.
Теперь, когда я создаю экземпляр RefBlah в приложении C #, он просто не освобождается, когда выходит из области видимости. (Я ждал и видел, как все другие объекты освобождаются, но он отказывается удалить себя).
Насколько я знаю, если бы они оба были обычными объектами .Net, они оба были бы собраны, когда класс выйдет из области видимости, потому что, хотя счетчик ссылок не достигает 0. И это потому, что нет корня ссылки на объекты из основного стека.
.NET GC по-разному относится к ссылкам из неуправляемых классов?
Как изменить дизайн так, чтобы RefBlah был уничтожен?