dan*_*jar 7 c++ pointers v8 copy noncopyable
我希望我的班级能够成为v8::Context
一名v8::External
成员.因此,我认为我必须使用持久句柄.
class ScriptHelper {
public:
ScriptHelper(v8::Persistent<v8::Context> Context) : context(Context) {
// ...
}
// ...
private:
v8::Persistent<v8::Context> context;
v8::Persistent<v8::External> external;
};
Run Code Online (Sandbox Code Playgroud)
但是,持久句柄在V8中是不可复制的,因此代码无法编译.错误发生在两个元素初始化的行中.对于上下文,这是在构造函数的初始化列表中,对于外部,它在构造函数体内.
1>错误C2440:'=':无法从'v8 :: Primitive*'转换为'v8 :: Object*volatile'1
>指向的类型不相关; 转换需要reinterpret_cast,C风格的转换或函数风格的转换
1> include\v8\v8.h(603):参见函数模板实例化'void v8 :: NonCopyablePersistentTraits :: Uncompilable(void)'被编译
我想过使用指向持久句柄的指针,但这似乎是反直觉的,因为句柄的概念已经暗示了某种参考.此外,我认为手柄会被破坏,因此V8的内部垃圾收集器可以清理对象.
如何将V8对象作为类成员持久存储?
更新:即使我使用指向持久句柄的指针,我也会为返回持久句柄的方法获得相同的编译器错误.
dan*_*jar 14
默认情况下,持久句柄使用不可复制的特征.显式传递可复制特征作为模板参数使它们像以前的版本一样工作.
Persistent<Value, CopyablePersistentTraits<Value>> persistent(isolate, value);
Run Code Online (Sandbox Code Playgroud)