ネイティブ 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 はポインターを再配置したり、ガベージ コレクションを行ったりするなど、ポインターに対して面白いことをするでしょうか?
第 2 に、World のサイズが事前にわからない場合 (事前に宣言されている場合)、0
バッファー サイズとして指定するだけでよいでしょうか? (もちろん、バッファから読み取ろうとしないという条件で)