2011-08-06 2 views
2

私の質問はthis oneと一致しますが、具体的な質問はありません。 私は1つのことを理解することはできません、私は仕様で見つかりませんでした、と私は誰もそれに尋ねた、非常に驚​​いています。 演算子を考えてみましょう:JNI:JavaオブジェクトをC++クラスのメンバにするのは安全ですか?

m_str = m_env->NewStringUTF("string"); 

はどのようにC++カウントから作成されたJavaオブジェクトへの参照ですか?これらのオブジェクトをネイティブ(C++)メソッドの呼び出しに格納するか、またはС++メソッドが実行を終了してJavaに制御を戻すと、そのオブジェクトが収集されることがありますか?

+0

あなたの質問はどの質問と一致しますか?私はリンクを見ません。 –

+0

申し訳ありませんが、私の悪い、固定! –

答えて

2

NewGlobalRefを使用してローカル参照をグローバルに変換してから、Javaオブジェクト参照をC++クラスのメンバーとして格納することができます。

ローカル参照をグローバル参照に変換した後、DeleteLocalRefを呼び出します。

最後に、C++デストラクタの一部として、メンバJavaオブジェクトへの参照でDeleteGlobalRefを呼び出すことを確認してください。

C++クラスのコピーコンストラクタもNewGlobalRefを呼び出す必要があります。

Local and Global Referencesを参照してください。

+1

ありがとう、私はいくつかのドキュメントとJNI仕様の一部を読んできましたが、私はこの特定のセクションを見落としました。 –