Я пишу приложение для Android jni и хочу использовать множество глобальных ссылок. Могу ли я ссылаться на глобальную ссылку с помощью 'NewGlobalRef' ?
Я попробовал следующее, и это работает, но я не знаю, разрешено ли это. Я также не знаю, является ли принцип NewGlobalRef тем, указывает ли глобальная ссылка на глобальную ссылку или две глобальные ссылки указывают на объект (например, shared_ptr)?
#include <jni.h>
class A {
public:
A(JNIEnv * env, jobject obj) : env(env)
{
globalRef = env->NewGlobalRef(obj);
env->DeleteLocalRef(obj);
}
A(const A & a) : env(a.env)
{
// a global reference points to a global reference ?
// or two global references point to an object ?
globalRef = env->NewGlobalRef(a.globalRef);
}
~A()
{
env->DeleteGlobalRef(globalRef);
globalRef = nullptr;
}
private:
JNIEnv * env;
jobject globalRef;
};
// main entry
JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM * jvm, void * reserved)
{
JNIEnv *env;
if (jvm->GetEnv((void**)&env, JNI_VERSION_1_4) != JNI_OK)
return JNI_ERR;
A a1(env, env->NewStringUTF("somthing"));
A a2(a1);
a1.~A();
// Can I continue to use 'a2' after 'a1' is destroyed ?
return JNI_VERSION_1_4;
}
Я ожидаю, что смогу продолжать использовать «a2» после уничтожения «a1».