4
删除了暴露给v8的C++对象时,如何使可能指向此对象的句柄无效。使指向已删除的C++对象的句柄无效
我正在使用v8作为更大应用程序的脚本接口。使用节点的ObjectWrap类,在v8中打包和访问较大应用程序中的对象。
问题是,包装对象的生命周期是有限的。如果,在JavaScript中,我执行类似:
var win = app.getWindow();
win.close(); // The C++ object that win references goes away
console.log(win.width()); // This should fail.
我希望它表现得就像评论说。在win.close()(或者其他一些事件可能在JS控制之外)之后,任何对获胜或重复句柄的访问都需要失败。
目前,我必须将包装的C++对象标记为无效,并检查每个方法调用的有效性。这是做到这一点的唯一方法吗,还是有办法将手柄标记为不再有效?
有趣的可能的解决方案。可以很容易地编写一个函数,通过将所有方法设置为错误方法来“销毁”句柄。 – aughey 2012-02-29 05:21:28
检查每个功能似乎并不复杂。也就是说,如果你制作了一个宏,那么在每个函数的顶部贴一个检查也很容易。 – loganfsmyth 2012-02-29 05:40:10