继承节点::objectWrap与类包装器
Inhering node::objectWrap vs class wrapper
假设我有一个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
}
通过这种方式,我直接编辑了类结构。但是有一个更简单的方法,那就是:
方法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
的类结构是不变的,但我想知道它的缺点是什么(如果有的话?)。当我传递cClassWrapper
时,v8的垃圾收集器是否一直在删除internal_
?
我不确定这两种实现之间的区别是什么
第二个选项通常在架构方面更好:您将获得一个与v8完全解耦的类。然后它可以移动到一些外部库,你可以独立地跟踪实现和绑定的变化(使用git或其他vcs),等等。
缺点是潜在的性能下降,这可能可以忽略不计。这根本不影响垃圾收集器的行为,ObjectWrap
的所有字段都由ObjectWrap
实现管理。
相关文章:
- 如何在c++17中制作一个模板包装器/装饰器
- std::vector的包装器,使数组的结构看起来像结构的数组
- 如何在c++迭代器类型中包装std::chrono
- 是否可以用"iostream"包装现有的TCP/OOpenSSL会话
- 用pybind11包装C++抽象类时出错
- 为左值和右值的包装器实现C++范围
- C结构,其指针将被包装在unique_ptr中
- 如何包装第三方DLL在R中使用
- 在类型和包装器之间reinterpret_cast是否安全<Type>?
- 将 N-arg 函数包装到另一个函数中
- 元组由 Swig 生成的 Python 包装器返回,用于C++向量
- 包装一个对象并假装它是一个 int
- 使用 Python Extension API 包装复杂C++类
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 包装C++类时不完整的类型 GLFWwindow
- 将函数包装器转换为 std::function
- C++函数包装器来捕获某些信号
- 创建包装升压适配器的自定义范围类
- 如何包装(撰写)增强 hana 地图并访问括号运算符(运算符 [])?
- 继承节点::objectWrap与类包装器