5

このチュートリアルで提供されているコードがあるとしましょう。

PointV8 の GC が JavaScript ラッパーを破棄したときに、作成された C++ オブジェクトのデストラクタが呼び出され、メモリから削除されるようにするには、どうすればよいでしょうか?

4

1 に答える 1

8

Persistent ハンドルを作成し、weak にします (v8::Persistent::MakeWeak(data, cb))。コールバックでは、C++ オブジェクトを削除できます。ガベージ コレクターの場合と同様に、弱い到達可能性が決定される正確な時間は、GC がいつ実行されるかによって異なります。したがって、ネイティブ リソースは、予想よりもかなり遅れて解放される可能性があります。保持しているネイティブ リソースの量を V8 に通知できます (v8::AdjustAmountOfExternalAllocatedMemory)。

ノードの「ObjectWrap」は、双方向のネイティブ/JS オブジェクト マッピングと弱いコールバックをカプセル化します: https://github.com/ry/node/blob/master/src/node_object_wrap.h

于 2011-01-09T20:24:57.433 に答える