【发布时间】:2016-07-07 01:47:54
【问题描述】:
假设我们有一个函数存储
void store(const QByteArray& data);
这个函数的工作是把data 存储起来。不幸的是,如果参数是用QByteArray::fromRawData(ptr, size) 创建的,那么这样做是不安全的,因为它及其所有副本都要求ptr 保持有效。
因此,store 无法禁止其调用者传入这样的数组、将data 视为立体模型上的const char* 或强制使用detach 进行深度复制。所有这些都不能令人满意,尤其是后者会损害性能,因为如果 data 在传递给 store 之前被 COW 复制,我们将进行不必要的深度复制。
QByteArray 有一个private 函数nulTerminated,它的实现似乎正是我想要的:如果它不拥有内存,它就会深拷贝。如果它拥有内存,它只会返回*this。
真的有两个问题
是否有使用
public设施的解决方法?Qt 文档提到
ptr只能在返回值及其任何副本的生命周期内保持活动状态。如果你说.right(.size()),这似乎不是副本,所以 Qt 需要根据文档进行深层复制。但真的如此吗?
【问题讨论】:
标签: c++ qt qbytearray