1

假设我有一个 C++ 类:

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

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

方法一——直接继承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
}

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

方法二 - 在内部保持对原始类的引用

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_;
}

注意方法二 cClassWrapper只有一个内部字段,即internal_. SimplycClassWrapper是一个用户cClass并且其内部没有cClass被触及。

显然,方法 II 更容易实现,因为类结构cClass没有受到影响,但我想知道它的缺点是什么(如果有的话?)。internal_当我四处走动时, v8 的垃圾收集器会不断删除cClassWrapper吗?

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

4

1 回答 1

1

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

不利的一面是潜在的性能下降,这可能可以忽略不计。这根本不影响垃圾收集器的行为,所有字段ObjectWrap都由ObjectWrap实现管理。

于 2014-08-04T10:50:10.953 回答