假设我有一个C++类:

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

我可以通过两种方式将此类绑定(bind)到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
}

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

方法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_。只是cClassWrappercClass的用户,而cClass的内部结构未受影响。

显然,方法II更易于实现,因为cClass的类结构没有受到影响,但是我想知道它的缺点是什么(如果有的话)。当我传递internal_时,v8的垃圾收集器是否会继续删除cClassWrapper

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

最佳答案

一般而言,seconds选项在体系结构方面更好:您将获得一个与v8完全分离的类。然后可以将其移至某个外部库,可以独立跟踪实现和绑定(bind)的更改(使用git或其他vcs),等等。

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

关于c++ - 固有 Node::objectWrap vs类包装器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25112257/

10-11 22:36
查看更多