作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
什么是<false>
和 <true>
在下面的代码中是什么意思?
分析Android系统文件读写的JNI实现,发现如下C++代码。
我不知道在“class ScopedBytesRO: public ScopedBytes”中,<true>
是什么意思
谁能帮帮我?
谢谢!
android-6.0.1-2.1.0\libnativehelper\include\nativehelper\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);
}
}
关于c++ - <false> 是什么意思?在 “class ScopedBytesRW : public ScopedBytes<false>”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48561630/
什么是和 在下面的代码中是什么意思? 分析Android系统文件读写的JNI实现,发现如下C++代码。 我不知道在“class ScopedBytesRO: public ScopedBytes”
我是一名优秀的程序员,十分优秀!