JNI: Безопасно ли делать объект Java членом класса C ++? - PullRequest
2 голосов
/ 06 августа 2011

Мой вопрос совпадает с с этим , но там нет подробностей по моему конкретному вопросу. Я не могу понять одну вещь, я не нашел в спецификации, и я очень удивлен, что никто не спросил это. Рассмотрим оператор:

m_str = m_env->NewStringUTF("string");

Как подсчитываются ссылки на объекты Java, созданные из C ++? Могут ли эти объекты храниться в вызовах собственных методов (C ++) или они будут собраны после того, как метод С ++ завершит выполнение и вернет управление Java?

1 Ответ

2 голосов
/ 06 августа 2011

До тех пор, пока вы используете NewGlobalRef для преобразования локальной ссылки в глобальную, перед сохранением ссылки на объект Java в качестве члена вашего класса C ++.

После преобразования локальной ссылки вглобальный вызов call DeleteLocalRef.

Наконец, как часть вашего деструктора C ++, убедитесь, что вы вызываете DeleteGlobalRef для ссылки на членский объект Java.

Конструктор копирования вашего класса C ++должен позвонить NewGlobalRef тоже.

См. Локальные и глобальные ссылки .

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