如何在V8中存储持久句柄
How to store persistent handles in V8?
我想让我的类持有一个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;
};
然而,持久句柄在V8中是不可复制的,因此代码无法编译。错误发生在初始化两个成员的行中。对于context, this在构造函数的初始化列表中,对于external, this在构造函数体中。
1>错误C2440: '=':无法从'v8::Primitive *'转换为'v8::Object *volatile '
1>所指向的类型不相关;转换需要reinterpret_cast、c风格强制转换或函数风格强制转换
1> includev8v8.h(603):参见参考函数模板实例化'void v8::NonCopyablePersistentTraits::Uncompilable(void)'正在编译
我想过使用指针指向持久句柄,但这似乎有违直觉,因为句柄的概念已经暗示了某种引用。此外,我认为句柄会被销毁,以便V8的内部垃圾收集器可以清理对象。
如何将V8对象持久地存储为类成员?
更新:即使我使用指向持久句柄的指针,对于返回持久句柄的方法,我也会得到相同的编译器错误。
默认情况下,持久句柄使用不可复制的trait。显式地将copyable trait作为模板参数传递,使它们像以前的版本一样工作。
Persistent<Value, CopyablePersistentTraits<Value>> persistent(isolate, value);
相关文章:
- 外壳包装器句柄/执行交互式命令管道C++ UNIX
- 如何获取边缘窗口句柄 (HWND)?
- 枚举进程模块在有效句柄上返回无效句柄
- 在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效是什么?
- 从运行服务的应用程序代码中提取窗口句柄
- 在读取文件后重置句柄
- 是否有像地图这样的C++结构,但我得到的不是值的键,而是值的句柄?
- Microsoft ODBC 无法创建有效的句柄
- 我是否可以使用 win32 句柄以编程方式记录发送到/接收到 USB/COM 的内容
- 获取特定进程的句柄数
- C++ 创建 NdisProt 驱动程序的句柄
- 是否需要关闭来自 WinHTTP 异步的句柄?
- 句柄OK全部崩溃
- 我需要通过窗口句柄(HWND)获取文件,我该怎么办?
- 什么是 C# 等同于C++句柄
- c++使用字符串句柄对对象进行通用存储和检索
- 不存储函数返回句柄时的内存管理
- 在哈希容器中存储持久的v8对象句柄
- 在注册表中存储和使用 Windows 句柄 (WId)
- 如何在V8中存储持久句柄