Napi::ObjectWrap: 是否调用了析构函数以及如何调用?
Napi::ObjectWrap: is a destructor called and how?
我正在为 node.js 构建一个插件,感谢 node-addon-api。
我的每个 'traditionals' 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 初学者,喜欢 you.I 在 Github 中找到答案。
这是linkDestructor 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
希望对您有所帮助
我正在为 node.js 构建一个插件,感谢 node-addon-api。
我的每个 'traditionals' 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 初学者,喜欢 you.I 在 Github 中找到答案。
这是linkDestructor 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
希望对您有所帮助