是什么<false>意思?在"class ScopedBytesRW : public ScopedBytes<false>"
What does <false> mean? in “class ScopedBytesRW : public ScopedBytes<false>”
以下
代码中的<false>
和<true>
是什么意思?
我分析了 Android 系统文件读写的 JNI 实现,找到了以下C++代码。
我不知道在"class ScopedBytesRO: public ScopedBytes"中,<true>
的含义是什么
谁能帮助我?
谢谢!
android-6.0.1-2.1.0\libnativehelper\includeativehelper\ScopedBytes.h
#ifndef SCOPED_BYTES_H_included
#define SCOPED_BYTES_H_included
#include "JNIHelp.h"
template<bool readOnly>
class ScopedBytes {
public:
ScopedBytes(JNIEnv* env, jobject object)
: mEnv(env), mObject(object), mByteArray(NULL), mPtr(NULL)
{
if (mObject == NULL) {
jniThrowNullPointerException(mEnv, NULL);
} else if (mEnv->IsInstanceOf(mObject, JniConstants::byteArrayClass)) {
mByteArray = reinterpret_cast<jbyteArray>(mObject);
mPtr = mEnv->GetByteArrayElements(mByteArray, NULL);
} else {
mPtr = reinterpret_cast<jbyte*>(mEnv->GetDirectBufferAddress(mObject));
}
}
~ScopedBytes() {
if (mByteArray != NULL) {
mEnv->ReleaseByteArrayElements(mByteArray, mPtr, readOnly ? JNI_ABORT : 0);
}
}
private:
JNIEnv* mEnv;
jobject mObject;
jbyteArray mByteArray;
protected:
jbyte* mPtr;
private:
// Disallow copy and assignment.
ScopedBytes(const ScopedBytes&);
void operator=(const ScopedBytes&);
};
class ScopedBytesRO : public **ScopedBytes<true>** {
public:
ScopedBytesRO(JNIEnv* env, jobject object) : **ScopedBytes<true>**(env, object) {}
const jbyte* get() const {
return mPtr;
}
};
class ScopedBytesRW : public ScopedBytes<false> {
public:
ScopedBytesRW(JNIEnv* env, jobject object) : **ScopedBytes<false>**(env, object) {}
jbyte* get() {
return mPtr;
}
};
#endif // SCOPED_BYTES_H_included
ScopedBytes 是一个模板化类,具有 2 种状态:只读 ( true
( 或非读取 ( false
(。
当对象被销毁时,如果它是只读的,它会设置标志JNI_ABORT
这样内存就不会被释放。否则,标志0
(无值(并释放内存。
template<bool readOnly>
class ScopedBytes
{
...
~ScopedBytes() {
mEnv->ReleaseByteArrayElements(... , readOnly ? JNI_ABORT : 0);
}
}
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- 伪造事实↔false
- QueryWorkingSet总是返回false
- EASTL矢量<向量<int>>连续的
- 如何区分地图中的 0 和 false?
- 模板参数列表中的 false 在模板初始化期间计算为什么?
- Arduino-C++ bool 不会从 false 变为 true
- 当返回类型声明为 ListNode 时,我们是否可以返回 false<T>*
- 当我的 if 条件计算结果为 false 时,我的 else 块将不会执行
- 等于在 c++ 中返回 false
- strcmp 对于相等的字符序列返回 false
- std::is_class 在引用类上为 false
- ios_base::sync_with_stdio(false); cin.tie(NULL);
- C++ - 负数和正数之间的比较返回 false
- 如何使用boost定义布尔类,可能的值应该是TRUE或FALSE?
- 如何编写一个接受如下断言消息的自定义断言函数:assert(false) << "assertio
- protobuf 的 ParseFromString 函数返回 false
- WaitForMultipleObjects when bwaitall is false
- 跳转到if(false)块有问题吗
- 为什么当 while 循环中的 if 条件变为 false 时,我的函数不输出最后一条语句?