非AI生成,觉得有用,就请您帮忙点赞转发收藏吧,您的鼓励是我创作的动力,多谢看官。
一、QByteArray
QByteArray 是一个“隐式共享(Copy-On-Write, COW)的字节容器”,它本身是一个值语义类型,真正的数据是存放在内存堆上的。
二、QByteArray的内部数据结构(简化)
struct Data {
std::atomic<int> ref; // 引用计数
int size; // 字节数
int alloc; // 容量
char data[]; // 字节数组(真实数据)
};
三、QByteArray的隐式共享(Copy-On-Write, COW)
1.浅拷贝(默认行为)
QByteArray a = "hello";
QByteArray b = a;a ──┐
├──▶ Data { ref = 2, data = "hello" }
b ──┘✅ 不拷贝数据
✅ 只增加引用计数
✅ 极快
2.写时拷贝(COW)
b[0] = 'H';
a ──▶ Data { ref = 1, data = "hello" }
b ──▶ Data { ref = 1, data = "Hello" }✅ 只在写操作时深拷贝
✅ 读操作永远共享
四、QByteArray的常用函数
1.构造函数
QByteArray(QByteArray &&other)
QByteArray(const QByteArray &other)
QByteArray(int size, char ch) //构造一个大小为size的字节数组,每个字节都设置为字符ch。
QByteArray(const char *data, int size = -1)
QByteArray()
2.查找相关函数
int indexOf(const QByteArray &ba, int from = 0) const
int indexOf(char ch, int from = 0) const
int indexOf(const char *str, int from = 0) const
int indexOf(const