5

私はいくつかの C++ コードを JNI でラップしていて、次のファクトリ関数に出くわしました:

std::unique_ptr<MetricPlanner> create_metric_planner(*arguments*)

後で使用するために、この関数が作成するプランナーへの参照を Java に戻す必要がありますが、a) どのように戻すか、b) 渡されるとどうなるかについて混乱しています。

通常、私は次のように渡してきました:

Director *DIRECTOR = new Director(arguments);
return (jlong)DIRECTOR;

そしてそれは魅力のように機能しました。

通常のコンストラクターの代わりに、このタイプのポインターを返すファクトリ関数が使用されている場合に、JNI を使用してオブジェクトを参照するための類似のプロセスを誰かが説明できますか?

4

2 に答える 2

3

関数の戻り値をJavaに渡し、後でそれを使用するので、スコープが終了したときに戻り値を破棄しcreate_metric_plannerたくありません。unique_ptrこれを行うには、を呼び出す必要がありますunique_ptr::release

return (jlong)create_metric_planner( ... ).release();

ある時点で、その関数によって返されるオブジェクトの使用が終了したら、それを実行する必要があることを忘れないでくださいdelete(または、使用しているライブラリによって提供される削除関数を呼び出す)。

于 2012-07-16T21:55:45.510 に答える