Como criar, manipular e destruir objetos JS :: Heap <T> no Spidermonkey?

UsandoSpidermonkey 24, 38, 45

Documentação do Spidermonkey diz: "Os ponteiros de coisa do GC na pilha devem ser agrupados em um JS :: Heap. A única exceção é se forem adicionados como raízes com as funções JS_AddRoot () ou a classe JS :: PersistentRooted, masnão faça isso a menos é realmente necessário.Os ponteiros JS :: Heap também devem continuar sendo rastreados da maneira normal, que não é coberto aqui ".

O que exatamente o rastreamento significa neste caso? O código a seguir está faltando?

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);
}

Preciso adicionar "rastreamento"? Preciso fazer raiz do objeto da barra quando ele é armazenado no Foo? Eu deveria preferir usar as funções JS_AddRoot () para fazer root na barra em vez de usar o Heap?

questionAnswers(2)

yourAnswerToTheQuestion