多亏了node-addon-api,我正在为node.js构建一个插件。
我的每个“传统” C ++类都包装了一个C对象。然后,我的Napi :: ObjectWrap类包装了这些C ++对象。
my_object -> MyObject -> Napi::ObjectWrap<MyObjectWrapper>
MyObjectWrapper实例包含对MyObject实例的引用,该引用包含对my_object实例的引用。因为需要释放C对象,所以我认为MyObject的析构函数可以完成此工作,但包装程序从未调用过它。
我对node-addon-api相当陌生,我不确定是否需要了解垃圾收集器。
我想知道的是何时以及如何破坏包装器,以及将null传递给Javascript端的对象是否有任何效果。任何线索,将不胜感激。
我是像您这样的node-addon-api初学者。我在Github中找到了答案。
这是未调用的链接Destructor
我的理解是,当内存不足时,V8 GC将运行。因此,如果要调用属于c ++实例的ObjectWrapper的析构函数,则应强制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
希望这可以帮助
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句