On Sat, May 16, 2009 at 1:27 PM, Mike Belshe <[email protected]> wrote:
> You can create a weak reference to the object, and when the object is GC'd
> in v8, the weak reference handler will get called. Check out the v8.h
> documentation for weak references and it will probably make sense.
> Mike
>
Hi Mike,
So I guess the code would look like this:
void MyDestructor(Persistent<Object> object, void*)
{
// do whatever cleanup is required
}
static v8::Handle<v8::Value> MyCallback(const v8::Arguments& args) {
// Create a new V8 object template with one internal field.
v8::Handle<v8::ObjectTemplate> my_templ = v8::ObjectTemplate::New();
my_templ->SetInternalFieldCount(1);
// Create a new MyClass instance.
MyClass* my_class = ...;
// Create a new persistent V8 object.
v8::Persistent<v8::Object> obj =
v8::Persistent<v8::Object>::New(my_templ->NewInstance());
// Attach the MyClass instance to the V8 object.
obj->SetInternalField(0, v8::External::New(my_class));
// Make the V8 object a weak reference and assign the destructor.
obj.MakeWeak(NULL, &MyDestructor);
return obj;
}
In what circumstances, if any, would it be appropriate to make the
ObjectTemplate a weak reference instead of the Object? Would any Objects
created with a weak reference ObjectTemplate automatically have the
destructor called for them?
Thanks,
Marshall
>
>
> On Fri, May 15, 2009 at 8:38 PM, Marshall Greenblatt <
> [email protected]> wrote:
>
>> Hi All,
>>
>> I'm seeking a way to trigger destruction (or reference decrement) of a C++
>> object attached to a V8 object when the V8 object is destroyed. For
>> instance, consider the following code where I create and return a new V8
>> object in a function template callback:
>>
>> static v8::Handle<v8::Value> MyCallback(const v8::Arguments& args) {
>> // Create a new V8 object template with one internal field.
>> v8::Handle<v8::ObjectTemplate> my_templ = v8::ObjectTemplate::New();
>> my_templ->SetInternalFieldCount(1);
>>
>> // Create a new MyClass instance.
>> MyClass* my_class = ...;
>>
>> // Create a new V8 object.
>> v8::Local<v8::Object> obj = my_templ->NewInstance();
>>
>> // Attach the MyClass instance to the V8 object.
>> obj->SetInternalField(0, v8::External::New(my_class));
>>
>> return obj;
>> }
>>
>> How can I clean up the MyClass instance when the associated V8 object
>> destroyed? Is there some way that I can assign a destructor callback for
>> the V8 object?
>>
>> Thanks,
>> Marshall
>>
>> >>
>>
>
--~--~---------~--~----~------------~-------~--~----~
Chromium Developers mailing list: [email protected]
View archives, change email options, or unsubscribe:
http://groups.google.com/group/chromium-dev
-~----------~----~----~----~------~----~------~--~---