假设我有一个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_
。只是cClassWrapper
是cClass
的用户,而cClass
的内部结构未受影响。显然,方法II更易于实现,因为
cClass
的类结构没有受到影响,但是我想知道它的缺点是什么(如果有的话)。当我传递internal_
时,v8的垃圾收集器是否会继续删除cClassWrapper
?我不确定这两种实现之间的区别是什么。
最佳答案
一般而言,seconds选项在体系结构方面更好:您将获得一个与v8完全分离的类。然后可以将其移至某个外部库,可以独立跟踪实现和绑定(bind)的更改(使用git或其他vcs),等等。
缺点是潜在的性能下降,这可能可以忽略不计。这根本不会影响垃圾回收器的行为,ObjectWrap
的所有字段都由ObjectWrap
实现管理。
关于c++ - 固有 Node::objectWrap vs类包装器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25112257/