Wie kann ich JS :: Heap <T> -Objekte in Spidermonkey erstellen, verarbeiten und zerstören?
UsingSpidermonkey 24, 38, 45
Spidermonkey Dokumentation sagt: "GC-Dingzeiger auf dem Heap müssen in einen JS :: Heap eingeschlossen werden. Die einzige Ausnahme ist, wenn sie als Roots mit den JS_AddRoot () - Funktionen oder der JS :: PersistentRooted-Klasse hinzugefügt werden, aber mache das nur, wenn es ist wirklich notwendig.JS :: Heap-Zeiger müssen auch weiterhin auf die normale Weise verfolgt werden, das hier nicht behandelt wird. "
Was genau bedeutet Tracing in diesem Fall? Fehlt der folgende Code?
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);
}
Muss ich "tracing" hinzufügen? Muss ich ein Balkenobjekt rooten, wenn es in Foo gespeichert ist? Soll ich lieber die JS_AddRoot () - Funktionen verwenden, um die Leiste zu rooten, anstatt Heap zu verwenden?