У меня вопрос по поводу несинхронизации жизненного цикла объектов C ++ Object и Javascript Object, и надеюсь, что здесь ваши гуру могут мне помочь.
В частности, я встраиваю SpiderMonkey в свою программу на C ++.Я не уверен, что мой подход правильный или нет.То, что я делаю, похоже на
(1) Программа C ++ загружает файл Javascript и вызывает функцию ввода.
(2) В функции ввода некоторые функции C ++ вызываются для инициализации программы,Во время этих вызовов будут созданы некоторые объекты C ++.
(3) В зависимости от взаимодействия с пользователем соответствующая функция сценария будет вызываться как обработчик события.
Этот подход работает, но с одной проблемой (может быть неопознанным больше:)
То есть
В моей функции обработчика событий JS мне нужно получить C ++возьмите объект в контекст Javascript и назовите его функцией-членом.Для этого в моей функции извлечения C ++ я проверяю, был ли создан соответствующий объект JS-партнера или нет.Если нет, я использую JS_NewObject, чтобы создать и вернуть его.Тогда функция JS может вызывать нативную функцию для него.
Проблема в том, что в некоторых случаях результат такого вызова нативной функции приведет к смерти объекта C ++.Тем не менее, я не могу найти способ уведомить JS-контекст, чтобы удалить его объект JS peer тоже.Мне не удалось найти функцию JSAPI для этого.
В моей текущей программе все объекты JS, созданные с использованием JS_NewObject, уничтожаются, когда, наконец, среда выполнения JS уничтожается.
Полагаю, это как-то связано с "сборкой мусора" SipderMonkey.Но я еще не нашел хорошего гида.Большое спасибо за любое предложение