gpt4 book ai didi

c++ - 了解 QVector append() - 为什么它有条件地复制?

转载 作者:行者123 更新时间:2023-11-30 02:25:41 28 4
gpt4 key购买 nike

这是来自 github 的 QVector 的 append() 的实现:

template <typename T>
void QVector<T>::append(const T &t)
{
if (d->ref != 1 || d->size + 1 > d->alloc) {
const T copy(t);
realloc(d->size, QVectorData::grow(sizeOfTypedData(), d->size + 1, sizeof(T),
QTypeInfo<T>::isStatic));
if (QTypeInfo<T>::isComplex)
new (p->array + d->size) T(copy);
else
p->array[d->size] = copy;
} else {
if (QTypeInfo<T>::isComplex)
new (p->array + d->size) T(t);
else
p->array[d->size] = t;
}
++d->size;
}

如果对 vector 的引用数 != 1 或者它需要调整大小,为什么它需要制作 t 的拷贝,为什么它只在这些情况下制作拷贝?

相关问题已被问到here , 但在代码中总是在附加到底层数组之前创建 t 的拷贝。

最佳答案

乍一看,这可能是因为 if 部分用于 vector 重新分配时,而 else 部分用于不重新分配时。当它确实重新分配时,用户可以完成 vector.append(vector[index]) 在这种情况下 t 在重新分配后将变得无效,因此必须在重新分配之前进行复制重新分配。在没有重新分配的 else 部分 t 将保持有效并且不需要复制。

关于c++ - 了解 QVector append() - 为什么它有条件地复制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43958255/

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