JNI中对于智能指针的处理

对于普通指针,我们经常保存指针所代表的的地址(建议使用long型来保存),对于智能指针该如何在java层保持其引用呢?

最近因为公司在对一个已经成型的c++产品移植到安卓,原c++代码中好些都是使用智能指针来管理内存的,在java层保留对象引用的时候,遇到了一点疑问。

其实说白了也没啥大不了的,在opencv的一个问答中,有人做出了回答,请移步:FaceRecognizer.java in Opencv4Android 2.4.3,这个问题就是一个人在问如何在java层保持对智能指针 Ptr<FaceRecognizer> 的引用,因为一旦离开Ptr的作用域,就会被回收掉,最终给出的答案是

 Ptr<FaceRecognizer> model =createLBPHFaceRecognizer();
 model.addref();//增加引用计数
 jlong ptr =(jlong)model.obj

即在返回实际对象的内存地址之前,先增加该对象的引用计数,防止智能指针的释放引起对象的回收即可。

转载于:https://my.oschina.net/tnjin/blog/389165

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值