2016-12-23 9 views
1

Qt Javascriptに関する質問があります。Qt QML Javascriptはどのようにメモリを管理しますか?

ほとんどの場合、JavaScriptはガベージコレクションの参照カウントまたはマークとスイープを使用します。私はQtのやり方が不思議です。

特に、QJSValueを使用してJavaScriptオブジェクトをC++に渡すことができます。私はJavaScriptのコールバック関数をC++メソッドに渡し、その関数を非同期に呼び出す(例えばhttp応答)QJSValueはオブジェクトへの参照を持っているので安全ですか?私は確信が持てません。

Qtでマークとスイープのガベージコレクションを使用すると、C++側でレフェリーをどのようにマークすることができますか? QtのJavaScriptは参照カウントを使用しますか?

+0

ようこそスタックオーバーフロー。 [The Tour](http://stackoverflow.com/tour)を読み、[ヘルプセンター](http://stackoverflow.com/help/asking)の資料を参考にしてください。ここに聞いてください。 –

+0

ここでのJavaScriptの部分は、Windowsの場合はどのOSでもスクリプトホストを使用しますが、MSHTAを使用します。 Qt自体にガベージコレクションやデフラグはありません.Ct +ランタイムを使用します。 – Swift

+0

時々それだけではありません:https://bugreports.qt.io/browse/QTBUG-50319 – dtech

答えて

1

http://doc.qt.io/qt-5/qjsvalue.html

れるISOBJECT()QJSValueが真であることのみ実際のオブジェクトへの参照を運ぶことに注意してください。 QJSValueをコピーするとオブジェクト参照だけがコピーされ、オブジェクト自体はコピーされません。オブジェクトを複製する(オブジェクトのプロパティを別のオブジェクトにコピーする)場合は、スクリプトコードのfor-inステートメントやC++のQJSValueIteratorを使用してオブジェクトのプロパティをコピーできます。

QJSValueは参照を保持します。

関連する問題