Как создавать, обрабатывать и уничтожать объекты 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?

Ответы на вопрос(2)

Ваш ответ на вопрос