Javascript ObjectWrap:是否调用析构函数以及如何调用?

Javascript ObjectWrap:是否调用析构函数以及如何调用?,javascript,c++,node.js-addon,node-addon-api,Javascript,C++,Node.js Addon,Node Addon Api,我正在为node.js构建一个插件,这要感谢 我的“传统”C++类中的每一个都封装了C对象。然后,我的纳皮峰::ObjeTWrrp类包装这些C++对象。 my_object -> MyObject -> Napi::ObjectWrap<MyObjectWrapper> my_object->MyObject->Napi::ObjectWrap MyObjectWrapper实例包含对MyObject实例的引用,MyObject实例包含对my_对象实例的引用。 由于需

我正在为node.js构建一个插件,这要感谢

我的“传统”C++类中的每一个都封装了C对象。然后,我的纳皮峰::ObjeTWrrp类包装这些C++对象。

my_object -> MyObject -> Napi::ObjectWrap<MyObjectWrapper>
my_object->MyObject->Napi::ObjectWrap
MyObjectWrapper实例包含对MyObject实例的引用,MyObject实例包含对my_对象实例的引用。 由于需要释放C对象,我认为MyObject的析构函数可以完成这项工作,但包装器从未调用过它

我对节点插件api还相当陌生,我不确定是否理解垃圾收集器

我想知道的是包装器何时以及如何被销毁,以及将null传递给Javascript端的对象是否有任何影响。
如果您对此有任何线索,我们将不胜感激。

我和您一样是node addon api的初学者。我在Github中找到了答案

这是链接

我的理解是,V8 GC在内存不足时运行。 因此,如果您想调用属于C++实例的ObjtWrrPrter的析构函数, 您应该强制gc运行

示例代码如下所示:

var createObject = require('bindings')('addon'); //

function forceGC() {
    if (global.gc) {
      global.gc();
    } else {
      console.warn('No GC hook! Start your program as `node --expose-gc ./addon.js`.');
    }
  }

var obj = createObject(10); //creat ObjectWrapper from c++ to V8 
console.log(obj);
console.log( obj.plusOne() ); // 11
console.log( obj.plusOne() ); // 12
console.log( obj.plusOne() ); // 13
obj=null;
forceGC();//after forceGC ,the c++ destructor function will call

希望这有帮助