对于普通指针,我们经常保存指针所代表的的地址(建议使用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
即在返回实际对象的内存地址之前,先增加该对象的引用计数,防止智能指针的释放引起对象的回收即可。