сохранение ссылки на управляемый класс в собственном классе и обновление его в управляемом модуле

#.net #c -cli

#.net #c -cli

Вопрос:

Я знаю, что могу выделить и сохранить дескриптор управляемого класса в собственном классе в проекте C / CLI, используя шаблон gcroot. Вопросы: 1. Как я могу передать ссылку на ManagedClass, на который я ссылаюсь с помощью gcroot, другому управляемому классу в управляемом модуле? 2. Может ли что-нибудь пойти не так, когда я обновляю ManagedClass в управляемом модуле? Например, может ли сборка мусора переместить его в память, чтобы дескриптор, обернутый gcroot, больше не был действительным?

Ответ №1:

  1. Как я могу передать ссылку на ManagedClass, на который я ссылаюсь с помощью gcroot, другому управляемому классу в управляемом модуле?

Просто передайте gcroot. у gcroot есть преобразование оператора в содержащийся T ^.

  1. Может ли что-нибудь пойти не так, когда я обновляю ManagedClass в managed module?

Ничего относительно не приходит на ум.

Например, может ли сборщик мусора переместить его в память, чтобы дескриптор, обернутый gcroot, больше не был действительным?

Нет. gcroot переносит «дескриптор» — это не прямой указатель, поэтому, если сборщик мусора перемещает объект, на который указано, дескриптор (удерживаемый gcroot) будет обновлен, чтобы узнать новое местоположение. Таким образом, gcroot все еще будет действительным.