Что такое pinPtrArray для настройки этого контейнера Mat? - PullRequest
0 голосов
/ 07 ноября 2018

Этот фрагмент кода принадлежит поставщику устройства, для которого я использую их библиотеки. Я ни в коем случае не эксперт по программированию и должен понимать это для исследовательского проекта.

pin_ptr<System::Byte> pinPtrArray;
pinPtrArray = &e->GetImageData->dataRawPixels2Byte[0];
Mat im (e->Width, e->Height, CV_16U, pinPtrArray);

Кто-нибудь понимает, что такое pin_ptr<System::Byte>? Кроме того, что делает внедрение этого в контейнер Mat? Если бы кто-то мог объяснить, это было бы очень признательно.

1 Ответ

0 голосов
/ 07 ноября 2018

Здесь у вас есть подробное объяснение pin_ptr. В управляемом мире C ++ / CLI (.NET Framework) объекты в куче (в памяти) управляются сборщиком мусора. Он может перемещать объекты, чтобы предотвратить фрагментацию памяти. Он также может удалить объект, если объект находится вне области видимости. Когда вы используете управляемую память в собственной среде (здесь Mat - это собственный объект, а e - управляемый), вы должны «закрепить» этот управляемый объект, чтобы предотвратить перемещение объекта, на который указывает объект, в управляемую кучу. Теперь вы можете безопасно использовать данные, обозначенные pinPtrArray. Сборщик мусора не будет перемещать его во время выполнения.

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