Correct way to create a V8::Persistent<Object> from a V8::Handle<Object>

DeX3 picture DeX3 · Aug 20, 2013 · Viewed 7k times · Source

I just upgraded my V8 version to 3.20.16 (from some very old version). I can no longer use

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

to create a persistent handle to an object. The compiler suggests using static T* v8::Persistent<T>::New(v8::Isolate*, T*) [with T = v8::Object] instead. However, if I change my code to

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

the compiler complains that this function is private. How do I create a Persistent<Object> handle from a normal Handle<Object> now?

I've googled and the only thing I found was that the documentations seem to contradict each other:

thanks for any help in advance

Answer

Vyacheslav Egorov picture Vyacheslav Egorov · Aug 20, 2013

There is a constructor that accepts normal Handle<T> you don't need to dereference it.

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

should work.