2011-01-01 12 views
5

Digamos que tengo el código proporcionado en this tutorial.En V8, ¿cómo eliminaría los objetos envueltos de C++ después de que sus contrapartes de JavaScript se recojan basura?

¿Cómo puedo modificar esto para que el objeto C++ Point que se crea tenga su destructor llamado y se elimine de la memoria cuando el GC for V8 destruya el contenedor de JavaScript?

+0

posible duplicado de [¿Cómo liberar a un C++ objeto envuelto cuando el objeto Javascript asociado es basura recogida en V8?] (Http: //stackoverflow.com/questions/173366/how-do-you-free-a-wrapped-c-object-when-associated-javascript-object-is-garbag) –

Respuesta

6

Quiere crear un controlador Persistent y hacerlo débil (v8 :: Persistent :: MakeWeak (data, cb)). En la devolución de llamada puede eliminar el objeto C++. Como es habitual con un recolector de basura, el momento exacto en que se determinará la accesibilidad débil depende de cuándo se realiza el GC. Por lo tanto, los recursos nativos pueden liberarse mucho más tarde de lo esperado. Puede informarle a V8 sobre la cantidad de recursos nativos que tiene en su poder (v8 :: AdjustAmountOfExternalAllocatedMemory).

nodo de "ObjectWrap" encapsula el mapeo nativa bidireccional/JS objeto y devolución de llamada débil: https://github.com/ry/node/blob/master/src/node_object_wrap.h

+1

Asegúrese de llamar a Dispose on the Persistent Handle o usted Obtendré una pérdida de memoria. Solo pasé unas pocas horas rastreando eso en mi código, eventualmente utilicé las llamadas ClearWeak(), Dispose(), Clear() como el destructor Object wrap destructor y lo arreglé. – PherricOxide

Cuestiones relacionadas