我目前正在为一个C++类编写JNI包装器,但我不确定到目前为止我所做的是否是最正确的方式。
据我了解,不可能声明Java构造函数为native
,因此我写了这样一段代码:
package log;
public class Logger
{
private long internalPtr = 0;
private native long createNativeInstance(String application, String module, String function);
public Logger(String application, String module, String function)
{
this.internalPtr = createNativeInstance(application, module, function);
}
public native String getApplication();
static { System.loadLibrary("log_java"); }
}
基本上,我的 `internalPtr` 字段保存着指向底层 C++ 实例的指针,我在一个纯 Java 构造函数中使用 `static native` 方法 `createNativeInstance()` 创建它。
这样做是正确的吗?
另一个问题是:如何处理释放内存?
我的 Java 技能非常有限,所以请毫不犹豫地建议甚至更“显而易见”的解决方案。
非常感谢。