我想围绕本机 c++ 对象创建一个 java 对象包装器。我通过将指向 c++ 对象的指针放在直接的 ByteBuffer 中来做到这一点,如下所示:
java端:
public class World {
private final ByteBuffer pointer;
public World() {
pointer = init();
}
private native ByteBuffer init();
public native void destroy();
}
本机方面:
extern "C" jobject Java_blabla_World_init(JNIEnv *e, jobject self) {
return env->NewDirectByteBuffer(new World, sizeof(World));
}
安全吗?意思是,java会对我的指针做一些有趣的事情,比如重新定位它或垃圾收集它?
其次,如果我事先不知道 World 的大小(它是前向声明的),可以只给出0
缓冲区大小吗?(当然,前提是我不尝试从缓冲区中读取)