JNI:我什么时候应该释放资源?

时间:2016-10-20 04:02:16

标签: java-native-interface

JNIEXPORT jstring JNICALL Java_com_xxx_xpdf_PdfToText_getTextOnly(JNIEnv *env, jclass obj,
                                                                 jstring pdf_path) {
  const char *pdf = env->GetStringUTFChars(pdf_path, 0);

  std::string content;
  unsigned int i = getTextFromPDF(pdf, &content);

  env->ReleaseStringUTFChars(pdf_path, pdf);

  const char *result = content.c_str();
  jstring str = env->NewStringUTF(result);

  return str;
}

我是否需要在此处重新strcontent?为什么?

1 个答案:

答案 0 :(得分:2)

没有。 return "\(baseSearchURL) \(term)" 指的是一个Java对象,它继续存在于此JNI方法之外,因为它是返回值。 str是一个C ++本地对象,当其声明范围退出时会被自动销毁。