在V8中,如何在JavaScript对应物被垃圾收集后删除包装好的C++对象?

HFL*_*FLW 5 javascript v8 embedded-v8

假设我有本教程中提供的代码.

我如何修改它,以便Point创建的C++对象调用析构函数,并在GC for V8销毁JavaScript包装器时从内存中删除?

mer*_*nst 7

您想要创建一个Persistent句柄并使其变弱(v8 :: Persistent :: MakeWeak(data,cb)).在回调中,您可以删除C++对象.像往常一样使用垃圾收集器,确定弱可达性的确切时间取决于执行GC的时间.因此,本机资源可能比您预期的要晚得多.您可以通知V8您持有的本机资源量(v8 :: AdjustAmountOfExternalAllocatedMemory).

node的"ObjectWrap"封装了双向本机/ JS对象映射和弱回调:https://github.com/ry/node/blob/master/src/node_object_wrap.h