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?