Merge "Nativehelper: Fix ScopedLocalRef" am: 7afb45427e am: 727c2c03c8
am: 2f1df33912
Change-Id: Ifa6599b15cdc7e8558f9bbd28e6b16bc2bd059fb
diff --git a/include/nativehelper/ScopedLocalRef.h b/include/nativehelper/ScopedLocalRef.h
index 73e39a9..4018f20 100644
--- a/include/nativehelper/ScopedLocalRef.h
+++ b/include/nativehelper/ScopedLocalRef.h
@@ -56,18 +56,21 @@
#if __cplusplus >= 201103L
// Move constructor.
ScopedLocalRef(ScopedLocalRef&& s) : mEnv(s.mEnv), mLocalRef(s.release()) {
- s.mEnv = nullptr;
}
- // Empty constructor now makes sense, as we can move-assign.
- ScopedLocalRef() : mEnv(nullptr), mLocalRef(nullptr) {
+ explicit ScopedLocalRef(JNIEnv* env) : mEnv(env), mLocalRef(nullptr) {
}
+ // We do not expose an empty constructor as it can easily lead to errors
+ // using common idioms, e.g.:
+ // ScopedLocalRef<...> ref;
+ // ref.reset(...);
+
// Move assignment operator.
ScopedLocalRef& operator=(ScopedLocalRef&& s) {
reset(s.release());
mEnv = s.mEnv;
- s.mEnv = nullptr;
+ return *this;
}
// Allows "if (scoped_ref == nullptr)"
@@ -82,7 +85,7 @@
#endif
private:
- JNIEnv* const mEnv;
+ JNIEnv* mEnv;
T mLocalRef;
DISALLOW_COPY_AND_ASSIGN(ScopedLocalRef);