我有一个关于 C++ 对象和 Javascript 对象生命周期错误同步的问题,希望您的专家可以帮助我。
具体来说,我将 SpiderMonkey 嵌入到我的 C++ 程序中。我不确定我的方法是否正确。我在做什么就像
(1) C++程序加载一个Javascript文件并调用入口函数。
(2)在入口函数中,调用一些C++函数来初始化程序。在这些调用期间,将创建一些 C++ 对象。
(3) 基于用户交互,调用相应的脚本函数作为事件处理函数。
这种方法有效,但有一个问题(可能还有更多:)
那是,
在我的 JS 事件处理函数中,我需要获取一个 C++ 对象到 Javascript 上下文并调用它的成员函数。为此,在我的 C++ 获取函数中,我检查其对应的 JS 对等对象是否已创建。如果没有,我使用 JS_NewObject 创建一个并返回它。然后 JS 函数可以调用它的原生函数。
问题在于,在某些情况下,这种原生函数调用的结果会导致 C++ 对象的死亡。但是,我也找不到通知 JS 上下文删除其 JS 对等对象的方法。我找不到这样做的 JSAPI 函数。
在我当前的程序中,当最终销毁 JS 运行时,所有使用 JS_NewObject 创建的 JS 对象都将被销毁。
我想这与 SipderMonkey 的“垃圾收集”有关。但是我还没有找到一个好的指南。非常感谢您的任何建议