diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index de64d7a670..288404f3c2 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -234,6 +234,7 @@ private: friend class QRegion; // Optimization for QRegion::rects() void reallocData(const int size, const int alloc, QArrayData::AllocationOptions options = QArrayData::Default); + void reallocData(const int sz) { reallocData(sz, d->alloc); } void freeData(Data *d); void defaultConstruct(T *from, T *to); void copyConstruct(const T *srcFrom, const T *srcTo, T *dstFrom); @@ -563,18 +564,17 @@ void QVector::append(const T &t) } template -inline void QVector::removeLast() +void QVector::removeLast() { Q_ASSERT(!isEmpty()); + Q_ASSERT(d->alloc); - if (d->alloc) { - if (d->ref.isShared()) { - reallocData(d->size - 1, int(d->alloc)); - return; - } - if (QTypeInfo::isComplex) - (d->data() + d->size - 1)->~T(); + if (!d->ref.isShared()) { --d->size; + if (QTypeInfo::isComplex) + (d->data() + d->size)->~T(); + } else { + reallocData(d->size - 1); } }