从 V8::Handle<Object> 创建 V8::Persistent<Object> 的正确方法

DeX*_*eX3 5 v8 embedded-v8

我刚刚将 V8 版本升级到 3.20.16(从一些非常旧的版本)。我不能再使用

Handle<Object> obj /* = ... */;
Persistent<Object> p = Persistent<Object>::New( obj );
Run Code Online (Sandbox Code Playgroud)

创建对象的持久句柄。编译器建议static T* v8::Persistent<T>::New(v8::Isolate*, T*) [with T = v8::Object]改用。但是,如果我将代码更改为

Handle<Object> obj /* = ... */;
Persistent<Object> p = Persistent<Object>::New( Isolate::GetCurrent(), *obj );
Run Code Online (Sandbox Code Playgroud)

编译器抱怨这个函数是私有的。我现在如何Persistent<Object>从正常创建句柄Handle<Object>

我用谷歌搜索,我发现的唯一一件事是文档似乎相互矛盾:

提前感谢您的任何帮助

Vya*_*rov 5

有一个接受普通的构造函数Handle<T>,您不需要取消引用它。

Persistent<Object>::New(Isolate::GetCurrent(), obj)
Run Code Online (Sandbox Code Playgroud)

应该管用。

  • 当我尝试找出如何将 v8::Persistent 转换为 v8::Local 时,我最终多次收到此页面。方法如下。`持久&lt;函数&gt; perMyFunc; Local&lt;函数&gt; localMyFunc = Local&lt;函数&gt;::New(isolate, perMyFunc);` (5认同)
  • 如果有人在使用更新版本的 V8 时遇到类似问题并且这不起作用,请尝试[此答案](http://stackoverflow.com/a/22648552/1144176)。 (4认同)