【问题标题】:Correct way to create a V8::Persistent<Object> from a V8::Handle<Object>从 V8::Handle<Object> 创建 V8::Persistent<Object> 的正确方法
【发布时间】:2013-08-20 10:24:33
【问题描述】:

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

Handle<Object> obj /* = ... */;
Persistent<Object> p = Persistent<Object>::New( obj );

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

Handle<Object> obj /* = ... */;
Persistent<Object> p = Persistent<Object>::New( Isolate::GetCurrent(), *obj );

编译器抱怨这个函数是私有的。现在如何从普通的Handle&lt;Object&gt; 创建Persistent&lt;Object&gt; 句柄?

我在谷歌上搜索过,唯一发现的是文档似乎相互矛盾:

提前感谢您的帮助

【问题讨论】:

    标签: v8 embedded-v8


    【解决方案1】:

    有一个constructor 可以接受普通的Handle&lt;T&gt;,您不需要取消引用它。

    Persistent<Object>::New(Isolate::GetCurrent(), obj)
    

    应该可以。

    【讨论】:

    • 是的,这样做了,因为不再有公共赋值运算符而感到困惑,我在使用构造函数的同一行中使用了它。对于Persistent-Handle 已经存在的情况,可以使用Persistent&lt;T&gt;.Reset()
    • 当我尝试了解如何将 v8::Persistent 转换为 v8::Local 时,我最终多次访问此页面。这里是如何。 Persistent&lt;Function&gt; perMyFunc; Local&lt;Function&gt; localMyFunc = Local&lt;Function&gt;::New(isolate, perMyFunc);
    • 如果有人在使用更新版本的 V8 时遇到类似问题并且这不起作用,请尝试 this answer
    猜你喜欢
    • 2019-10-16
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 2017-05-23
    相关资源
    最近更新 更多