¿Cómo crear, manejar y destruir objetos JS :: Heap <T> en Spidermonkey?

UtilizandoSpidermonkey 24, 38, 45

Documentación de Spidermonkey dice: "Los punteros de GC en el montón deben estar envueltos en un JS :: Heap. La única excepción a esto es si se agregan como raíces con las funciones JS_AddRoot () o la clase JS :: PersistentRooted, perono hagas esto a menos que Es realmente necesario.JS :: Los punteros del montón también deben seguir siendo rastreados de la manera normal, que no está cubierto aquí ".

¿Qué significa exactamente el rastreo en este caso? ¿Al código siguiente le falta algo?

struct Foo
{
   Foo(JS::HandleObject bar) : _bar(bar) {}  // Does that root bar?
   ~Foo() {_bar = nullptr;}                  // Does that release memory?

   JS::Heap<JSObject*>  _bar;
};

Foo *create(JSContext *jscontext, JSObject *parent)
{
   JS::RootedObject bar(jscontext, JS_NewObject(jscontext, &SOME_CLASS, NULL, parent));
   return new Foo(bar);
}

¿Necesito agregar "rastreo"? ¿Necesito rootear el objeto de la barra cuando está almacenado dentro de Foo? ¿Debo usar las funciones JS_AddRoot () en la barra raíz en lugar de usar Heap?

Respuestas a la pregunta(2)

Su respuesta a la pregunta