diff options
Diffstat (limited to 'include/ScopedLocalRef.h')
-rw-r--r-- | include/ScopedLocalRef.h | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/include/ScopedLocalRef.h b/include/ScopedLocalRef.h index 84ee11a95..e239b9e52 100644 --- a/include/ScopedLocalRef.h +++ b/include/ScopedLocalRef.h @@ -23,22 +23,28 @@ template<typename T> class ScopedLocalRef { public: - ScopedLocalRef(JNIEnv* env, T localRef) - : mEnv(env), mLocalRef(localRef) - { + ScopedLocalRef(JNIEnv* env, T localRef) : mEnv(env), mLocalRef(localRef) { } ~ScopedLocalRef() { reset(); } - void reset() { - if (mLocalRef != NULL) { - mEnv->DeleteLocalRef(mLocalRef); - mLocalRef = NULL; + void reset(T ptr = NULL) { + if (ptr != mLocalRef) { + if (mLocalRef != NULL) { + mEnv->DeleteLocalRef(mLocalRef); + } + mLocalRef = ptr; } } + T release() __attribute__((warn_unused_result)) { + T localRef = mLocalRef; + mLocalRef = NULL; + return localRef; + } + T get() const { return mLocalRef; } |