gpt4 book ai didi

c++ - 继承 node::objectWrap 与类包装器

转载 作者:太空宇宙 更新时间:2023-11-04 11:30:05 25 4
gpt4 key购买 nike

假设我有一个 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
}

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

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

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

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

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

最佳答案

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

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

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com