关于C/C++ Addons class 方式的一些疑问。
发布于 7 年前 作者 cnlile 3368 次浏览 来自 问答

在2015年2月,Node.js更新了 V8 API,这样之后,以前关于这个方面的著作和文档都变的没有意义了。我再看官方的API文档,有一些疑问,想问一下,请各位大神解答一下: 1、C++里面的class 方式,可以在类定义的时候定义成员函数,也可以先申明在类外定义成员函数的方式,我看了一下,似乎nodejs c++ class 只能以类外定义成员函数的方式吧,要符合V8 的特殊封装。在申明成员函数的时候,调用static v8::Persistentv8::Function Constructor ,这个方式我比较模糊具体作用, 能不能解释一下,只是觉得是不可以缺少。 2、看了文档,里面的class都是继承来自 public node::ObjectWrap,看了文档,是否有2个固定写法一定要这样来的,一个是 Init(Local<Object> exports)的函数,里面有个new 方式,觉得就是c++ 里面的new 对象指针,生成一个在内存栈上面的class对象。里面还有个 NODE_SET_PROTOTYPE_METHOD,就是给这个javascript 的调用做了一个Prototype封装。另外一个方式就是 ::New(const FunctionCallbackInfo<Value>& args) 这个,似乎它就是真正在干的new的工作,包装this 指针,new 一个新对象,Init 也是调用它来的。我想问一下,是否这些写法的固定写法。 3、就是C++ class的对象的生存周期,C++的内存对象,都是手动管理的,如果有new,那么必须有delete 释放,而javascript 是有GC的。就相当于C++是手动档的车,javascript 是自动挡的车,javascript 比较省力,但是C++更加精准和高效。我在代码中从来没看到delete 方式,我想应该是C++ new手动启用车,然后javascript 自动挡接管后自动升降档位,让程序跑,管理内存,不需要手动干预了吧。。那么class的生命周期,也是V8引擎控制,我就不用关心吧。 我参考文档是 https://nodejs.org/dist/latest-v6.x/docs/api/addons.html 请各路高手指教一下,最好能提供些比较新的资料,谢谢!

回到顶部