Използване на Spidermonkey 24, 38, 45
Документацията на Spidermonkey казва: „GC нещо указва на heap трябва да бъде обвит в 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() за root лента, вместо да използвам Heap?