继承node :: objectWrap vs class wrapper

时间:2014-08-04 05:28:44

标签: c++ node.js v8 node-modules embedded-v8

假设我有一个C ++类:

class cClass {
public:
    methodA();
    methodB();
private:
    //private stuff
}

我可以通过两种方式将此类绑定到Node:

方法I - 直接继承node :: objectWrap

class cClass : public node::ObjectWrap {
public:
    static void Init(v8::Handle<v8::Object> exports);
    methodA();
    methodB();
private:
    static v8::Handle<v8::Value> New(const v8::Arguments& args);
    //private stuff
}

这样我就直接编辑了类结构。但有一种更简单的方法,那就是:

方法II - 在内部保留对原始类的引用

class cClassWrapper : public node::ObjectWrap {
public:
    static void Init(v8::Handle<v8::Object> exports);
private:
    static v8::Handle<v8::Value> New(const v8::Arguments& args);
    cClass internal_;
}

方法II中的注意事项 cClassWrapper只有一个内部字段,即internal_。简单cClassWrapper是[{1}}的用户,cClass的内部未受影响。

显然,方法II更容易实现,因为cClass的类结构没有被触及,但我想知道它的缺点是什么(如果有的话)?当我传递cClass时,v8的垃圾收集器是否会一直删除internal_

我不确定两种实现之间的区别是什么。

1 个答案:

答案 0 :(得分:1)

在架构方面,秒选项通常更好:你得到一个与v8完全分离的类。然后可以将其移动到某个外部库,您可以独立跟踪实现和绑定的更改(使用git或其他vcs)等。

缺点是潜在的业绩下降,这可能是微不足道的。这根本不会影响垃圾收集器的行为,ObjectWrap的所有字段都由ObjectWrap实现管理。