Napi :: ObjectWrap:是一个调用的析构函数,如何调用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Napi :: ObjectWrap:是一个调用的析构函数,如何调用?相关的知识,希望对你有一定的参考价值。

由于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 not called

我的理解是,当内存不足时,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

希望这会有所帮助

以上是关于Napi :: ObjectWrap:是一个调用的析构函数,如何调用?的主要内容,如果未能解决你的问题,请参考以下文章

Node.js使用ffi-napi,ref-napi,ref-array-napi,ref-struct-napi调用动态库

#冲刺创作新星# #跟着小白一起学鸿蒙# [七] 写个NAPI子系统

节点 ffi napi,调用返回 true 但指针中没有结果

从 Webpack ReactJS/ReactTS 项目导入/需要 NAPI 插件

#星光计划2.0# OpenHarmony 源码解析之JavaScriptAPI-NAPI实践

深拷贝 NAPI::Value 对象