Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JNI的智能指针和外部代码交互 我想知道最好的方法是把指针(通过内存地址)指向C++库中的对象,它可以自由使用智能指针(NS-3)。目前,我使用基于路径的查找,我担心它的效率,因为它似乎对每个调用都进行完整的树遍历。如果我维护一个指向对象的标准指针,以便跨JNI边界使用,那么当Java仍然持有对该对象的引用时,该对象可能会被丢弃。使用指向智能指针的指针是最好的方法吗_Java_C++_Java Native Interface_Smart Pointers_Ns 3 - Fatal编程技术网

通过JNI的智能指针和外部代码交互 我想知道最好的方法是把指针(通过内存地址)指向C++库中的对象,它可以自由使用智能指针(NS-3)。目前,我使用基于路径的查找,我担心它的效率,因为它似乎对每个调用都进行完整的树遍历。如果我维护一个指向对象的标准指针,以便跨JNI边界使用,那么当Java仍然持有对该对象的引用时,该对象可能会被丢弃。使用指向智能指针的指针是最好的方法吗

通过JNI的智能指针和外部代码交互 我想知道最好的方法是把指针(通过内存地址)指向C++库中的对象,它可以自由使用智能指针(NS-3)。目前,我使用基于路径的查找,我担心它的效率,因为它似乎对每个调用都进行完整的树遍历。如果我维护一个指向对象的标准指针,以便跨JNI边界使用,那么当Java仍然持有对该对象的引用时,该对象可能会被丢弃。使用指向智能指针的指针是最好的方法吗,java,c++,java-native-interface,smart-pointers,ns-3,Java,C++,Java Native Interface,Smart Pointers,Ns 3,干杯, 克里斯这基本上就是我们的解决方案。在Java方面,对象作为简单的id保存,id到指针的算法映射非常简单(实际上是一个重新解释)。对于由引用计数指针管理的对象,id指向的“对象”是引用计数指针 以防万一:别忘了在终结器中释放它。你能发布一个例子吗!我们已经放弃了对Java的支持,所以我手头没有代码,但是从内存来看,我们将对象指针保存在一个Java长文件中(在C++中是jlong);我们将其初始化为零,用类似于*reinterpret\u cast(&variable)的内容插入指针,然后用

干杯,

克里斯

这基本上就是我们的解决方案。在Java方面,对象作为简单的id保存,id到指针的算法映射非常简单(实际上是一个
重新解释
)。对于由引用计数指针管理的对象,id指向的“对象”是引用计数指针


以防万一:别忘了在终结器中释放它。

你能发布一个例子吗!我们已经放弃了对Java的支持,所以我手头没有代码,但是从内存来看,我们将对象指针保存在一个Java长文件中(在C++中是
jlong
);我们将其初始化为零,用类似于
*reinterpret\u cast(&variable)
的内容插入指针,然后用相反的内容提取它。(这是基于swig所做的工作;我在Java接口中的同事是swig的维护者,并指导我朝着这个方向前进。)