Should you call ReleaseStringUTFChars if GetStringUTFChars returned a copy?

Книга Роба Гордона «Essential JNI: Java Native Interface» содержит следующий пример кода для преобразования jstring в строку C:

const char* utf_string;
jboolean isCopy;
utf_string = env->GetStringUTFChars(str, &isCopy);
/* ... use string ... */
if (isCopy == JNI_TRUE) {
    env->ReleaseStringUTFChars(str, utf_string);
}

Обратите внимание, что он вызывает только ReleaseStringUTFChars , если isCopy истинно.

Но книга Java Native Interface: Programmer's Guide and Specification (альтернативная ссылка: http://192.9.162.55/docs/books/jni/html/objtypes.html#5161 ]) говорит:

Вызов ReleaseString-Chars необходимо, имеет ли GetStringChars установите * isCopy в JNI_TRUE или JNI_FALSE. ReleaseStringChars либо освобождает копировать или откреплять экземпляр в зависимости от от того, есть ли у GetStringChars returned a copy or not.

I am correct in assuming this is a bug in Gordon's book?

71
задан Flavio 29 April 2013 в 10:20
поделиться