#.net #c -cli
#.net #c -cli
Вопрос:
Я знаю, что могу выделить и сохранить дескриптор управляемого класса в собственном классе в проекте C / CLI, используя шаблон gcroot. Вопросы: 1. Как я могу передать ссылку на ManagedClass, на который я ссылаюсь с помощью gcroot, другому управляемому классу в управляемом модуле? 2. Может ли что-нибудь пойти не так, когда я обновляю ManagedClass в управляемом модуле? Например, может ли сборка мусора переместить его в память, чтобы дескриптор, обернутый gcroot, больше не был действительным?
Ответ №1:
- Как я могу передать ссылку на ManagedClass, на который я ссылаюсь с помощью gcroot, другому управляемому классу в управляемом модуле?
Просто передайте gcroot. у gcroot есть преобразование оператора в содержащийся T ^.
- Может ли что-нибудь пойти не так, когда я обновляю ManagedClass в managed module?
Ничего относительно не приходит на ум.
Например, может ли сборщик мусора переместить его в память, чтобы дескриптор, обернутый gcroot, больше не был действительным?
Нет. gcroot переносит «дескриптор» — это не прямой указатель, поэтому, если сборщик мусора перемещает объект, на который указано, дескриптор (удерживаемый gcroot) будет обновлен, чтобы узнать новое местоположение. Таким образом, gcroot все еще будет действительным.