сохранение ссылки на управляемый класс в собственном классе и обновление его в управляемом модуле - PullRequest
0 голосов
/ 18 мая 2011

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

1 Ответ

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

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

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

Ничего касающегося не приходит на ум.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...