gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:37:19 25 4
gpt4 key购买 nike

感谢 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 的新手,我不确定是否了解所需的垃圾收集器。

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

最佳答案

我和你一样是 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

希望对你有帮助

关于javascript - Napi::ObjectWrap: 是一个析构函数,如何调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55852447/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com