1

ネイティブ 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バッファー サイズとして指定するだけでよいでしょうか? (もちろん、バッファから読み取ろうとしないという条件で)

4

2 に答える 2