Использование Обезьяны-паука 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);
}
Нужно ли добавлять «трассировку»? Нужно ли мне укоренять объект панели, когда он хранится внутри Foo? Должен ли я использовать функции JS_AddRoot() для корневой панели вместо использования кучи?