Hello, All.
Why in this code sample does not work IsWeak and ClearWeak?
void WeakCallback( v8::Persistent<v8::Value> object, void* parameter)
{
int* obj = static_cast< int* >( parameter );
delete obj;
object.ClearWeak();
object.Dispose();
}
v8::Handle<v8::Object> obj()
{
HandleScope hs;
v8::Local<v8::Object> obj = v8::Object::New();
//I want that my object has a reference to native pointer
v8::Local<v8::ObjectTemplate> native_tmpl = v8::ObjectTemplate::New();
native_tmpl->SetInternalFieldCount( 1 );
v8::Persistent<v8::Object> native = v8::Persistent<v8::Object>::New(
native_tmpl->NewInstance() );
int* ptr_i = new int( 1 );
native->SetPointerInInternalField( 0, ptr_i );
native.MakeWeak( ptr_i, WeakCallback );
obj->Set( v8::String::New( "native" ), native );
return hs.Close( obj );
}
//code
v8::Handle<v8::Value> native = obj()->Get( v8::String::New( "native" ) );
v8::Persistent<v8::Object> persistent = v8::Persistent<v8::Object>(
native->ToObject() );
bool b = persistent.IsWeak();//return false
persistent.ClearWeak();//doesn't work, because WeakCallback has been called
by gc
ClearWeak is necessary not to cause WeakCallback after std::move for native
C++ pointer.
What am I doing wrong?
--
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users