标签:java c-2 c11 unique-ptr java-native-interface
我用JNI包装了一些C代码,偶然发现了以下工厂函数:
std::unique_ptr<MetricPlanner> create_metric_planner(*arguments*)
我需要传递一个对该函数创建的规划器的引用,以供以后使用,但我很困惑
a)如何将其传回去,和
b)一旦传递将会发生什么.
通常情况下,我一直这样过去:
Director *DIRECTOR = new Director(arguments);
return (jlong)DIRECTOR;
它的工作就像一个魅力.
当使用返回这种类型指针的工厂函数而不是普通的构造函数时,有人可以解释用JNI引用对象的类似过程吗?
解决方法:
由于您将create_metric_planner函数的返回值传递给Java,然后再使用它,因此您不希望unique_ptr在其作用域结束时销毁返回值.要做到这一点,你必须拨打unique_ptr::release
.
return (jlong)create_metric_planner( ... ).release();
不要忘记,在某些时候,当你完成使用该函数返回的对象时,你必须删除它(或调用你正在使用的库提供的一些删除函数).
标签:java,c-2,c11,unique-ptr,java-native-interface 来源: https://codeday.me/bug/20190704/1375072.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。