有没有一种方法可以有效地在C ++中复制包装的JNI对象?

时间:2019-01-03 17:53:45

标签: c++ constructor java-native-interface invocation-api

我正在使用JNI Invocation API尝试将Java库包装为C ++。

我的C ++类本质上是JNI Jobject的容器,具有setter / getter方法来调用JNI并从所述Jobject检索数据。我想弄清楚的是我应该如何尝试复制类实例。例如,我要这样做:

absolute_date CURRENT_DATE = DATE;

我目前的解决方案是拥有一个复制构造器,其工作方式如下:

  1. 进行JNI调用以检索DATE的成员数据。
  2. 进行JNI调用以使用检索到的数据创建一个新的jobject。
  3. CURRENT_DATE中将Jobject设置为等于新创建的Jobject

从编程和效率上来说,这种方法当然都很繁琐。

复制jobject是理想的选择,但这意味着如果DATE超出范围,则将调用absolute_date构造函数,然后调用DeleteLocalRef(因此为新创建的对象制作jobject无效)。

有什么方法可以做我想要的吗?即是否可以通过JNI在JVM中创建Java对象的唯一克隆,以便我可以拥有2个或更多唯一的Jobject引用,每个引用都引用具有相同状态(即,相同的成员值等)的唯一Java对象?我应该提到我无法接触Java源代码。所有这些都必须通过调用调用API来完成。

如果没有,是否有办法使用多个jobject引用来执行此操作,即如果我有十个DATE副本,每个副本共享同一个jobject,是否有可能在最后一个{{1 }}对象被破坏了吗?聪明的指针?如果是这样,因为我还比较陌生,我将如何去做。

谢谢

0 个答案:

没有答案