gpt4 book ai didi

c++ - 是什么意思?在 “class ScopedBytesRW : public ScopedBytes

转载 作者:行者123 更新时间:2023-11-28 04:49:12 25 4
gpt4 key购买 nike

什么是<false><true>在下面的代码中是什么意思?

分析Android系统文件读写的JNI实现,发现如下C++代码。

我不知道在“class ScopedBytesRO: public Sc​​opedBytes”中,<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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com