Fixes possible memory leak in QContiguousCache

When inserting an item on a position that is already occupied, the destructor of the old item was never invoked.

Change-Id: I01dc4ec9f2da5027284eba94e1a9ad36b062a50d
Reviewed-by: Thomas McGuire <thomas.mcguire@kdab.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Fabian Bumberger 2012-08-27 17:29:18 -04:00 committed by Qt by Nokia
parent c2f10f915f
commit b4075c8ea3
1 changed files with 4 additions and 2 deletions

View File

@ -387,10 +387,12 @@ void QContiguousCache<T>::insert(int pos, const T &value)
Q_ASSERT_X(pos >= 0 && pos < INT_MAX, "QContiguousCache<T>::insert", "index out of range");
detach();
if (containsIndex(pos)) {
if(QTypeInfo<T>::isComplex)
if (QTypeInfo<T>::isComplex) {
(p->array + pos % d->alloc)->~T();
new (p->array + pos % d->alloc) T(value);
else
} else {
p->array[pos % d->alloc] = value;
}
} else if (pos == d->offset-1)
prepend(value);
else if (pos == d->offset+d->count)