Как создавать, обрабатывать и уничтожать объекты JS :: Heap <T> в Spidermonkey?
С помощьюСпайдермонкей 24, 38, 45
Документация Spidermonkey говорит: «GC-указатели на кучу должны быть обернуты в JS :: Heap. Единственное исключение из этого, если они добавляются как корни с помощью функций JS_AddRoot () или класса JS :: PersistentRooted, ноне делай этого, если только это действительно необходимо.JS :: Heap указатели также должны продолжать отслеживаться в обычном порядке, который здесь не рассматривается ".
Что именно означает отслеживание в этом случае? В следующем коде чего-то не хватает?
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);
}
Нужно ли добавлять «отслеживание»? Нужно ли рутировать объект bar, когда он хранится внутри Foo? Стоит ли использовать функции JS_AddRoot () для корневой панели вместо использования Heap?