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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage