Ich schreibe ein asynchrones Node-Addon, aber ich habe Mühe, herauszufinden, ob ich ein HandleScope in der "After" -Funktion verwenden muss, die den JavaScript-Callback des Clients aufruft. Ich habe Beispiele mit und ohne neue Bereiche gesehen, aber nie eine Erklärung warum. Hier ist ein Beispiel:
%Vor% Benötigen / wollen Sie ein HandleScope, wenn Sie den Rückruf anrufen?
Was passiert mit argv im Beispiel, wenn Sie ein neues HandleScope verwenden?
String::New("foo")
wird etwas auf dem Heap zuweisen und ein Handle zurückgeben, so dass Sie den Speicher freigeben müssen, auf den dieses Handle verweist. Wenn Sie sie an eine% co_de anfügen, wird% v8 das für Sie tun, sobald alle Referenzen auf Null gezählt sind.
Lokale Handles werden auf einem Stapel gehalten und bei Bedarf gelöscht Destruktor wird aufgerufen. Die Lebensdauer dieser Griffe wird durch a bestimmt handle scope, der oft zu Beginn einer Funktion erstellt wird Anruf. Wenn der Zugriffsbereich gelöscht wird, ist der Garbage Collector frei die Zuweisung der Objekte, auf die zuvor von Handles in der Referenz verwiesen wurde Handle-Bereich, sofern sie nicht mehr von JavaScript zugänglich sind oder andere Griffe.