Насколько я понимаю ( частично из чтения потоков здесь ), каждый объект C ++ / CLI в мире автоматически реализует IDisposable благодаря своему деструктору C ++ / CLI.
Мое дальнейшее понимание заключается в том, что всякий раз, когда ваш управляемый класс A использует экземпляр другого управляемого класса B, который реализует IDisposable, он несет ответственность за реализацию IDisposable где-то (или использование " используя «заявление», чтобы гарантировать, что B.Dispose вызывается.
Они оба верны? Если это так, то это означает, что в основном, когда бы я ни использовал объект C ++ / CLI в любом месте моего кода C #, мне нужна реализация IDisposable или использование для его очистки. Да
этого я не осознавал
В моем текущем проекте приложения ни один из моих классов C # на самом деле не "владеет" ни одним из экземпляров объекта C ++ / CLI, которые они используют. Я имею тенденцию создавать и передавать их свободно. Объект C # класса «A» может создать объект C ++ / CLI и затем передать его экземплярам классов C # «B» и «Z». Все 3 могут хранить ссылки на него, поэтому ни один из них не может вызвать Dispose, потому что ни один из них не владеет им.
Так что у меня есть целая куча IDisposable объектов C ++ / CLI, и никто никогда не вызывает Dispose для них.
Я думал, что это нормально. Лишь немногие из моих классов C ++ / CLI выделяют значительную часть памяти.
Это то, что меня должно волновать? Должен ли я попытаться перестроить свое приложение так, чтобы каждый объект C ++ / CLI принадлежал одному и только одному объекту C #, чтобы я мог реализовать IDisposable в классах C # и покорно вызывать Dispose для базовых экземпляров C ++ / CLI?