QByteArray前拷贝
时间: 2025-01-02 16:35:37 浏览: 69
### QByteArray 的深拷贝
对于 `QByteArray` 来说,默认情况下会采用隐式共享机制,即所谓的写时复制(copy-on-write)。这意味着当对象被赋值或传参时不立即进行数据的物理复制,而是多个实例共同指向同一块内存区域。只有在某个实例尝试修改这块共享的数据时才会触发真正的复制操作。
然而,在某些场景下可能确实需要显式的执行深拷贝以确保两个变量完全独立互不影响。可以通过调用 `QByteArray::detach()` 方法强制解除当前数组与其他副本之间的共享关系并创建一份新的私有副本来实现这一点[^2]。
下面是一个简单的例子展示如何对 `QByteArray` 执行深拷贝:
```cpp
#include <QByteArray>
#include <QDebug>
int main(){
// 创建初始的 QByteArray 对象
QByteArray original = "Hello";
qDebug() << "Original data:" << original.data();
// 显式地分离原对象以便于后续可以安全地对其进行更改而不会影响到新对象
original.detach();
// 构造一个新的 QByteArray 并通过 operator= 赋予其原有内容
QByteArray copy = original;
qDebug() << "Copy data before modification:" << copy.data();
// 修改原始数据
original[0]='J';
qDebug() << "After modifying the original:";
qDebug() << "Modified Original data:" << original.data();
qDebug() << "Unchanged Copy data:" << copy.data();
return 0;
}
```
此代码片段展示了即使在改变 `original` 中的内容之后,`copy` 中保存的数据仍然保持不变,证明两者之间已经实现了真正意义上的深拷贝。
阅读全文
相关推荐


















