diff options
author | Marc Mutz <marc.mutz@qt.io> | 2023-02-10 14:25:20 +0100 |
---|---|---|
committer | Qt Cherry-pick Bot <cherrypick_bot@qt-project.org> | 2023-02-15 19:49:48 +0000 |
commit | 8bb9290b72b379c9af6ae99b9f9b66235fd99675 (patch) | |
tree | df381da8aceb74dbdb75dbf8dcbd3a71a65c0ef2 | |
parent | 16d67bcb3dba5bdd6facb0e4334ebed897363938 (diff) | |
download | qtbase-8bb9290b72b379c9af6ae99b9f9b66235fd99675.tar.gz |
QVarLengthArray: clear() is not resize(0)
The latter needs the value_type to be default-constructible, which
shouldn't be required to clear() a container.
Use std::destroy_n() instead.
[ChangeLog][QtCore][QVarLengthArray] clear() no longer requires the
value_type to be default-constructible.
Change-Id: I806de8f3826b50c0bd38156892c3afeb15f13ac9
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
(cherry picked from commit fbfee2d7c59a7c6cd17ae7a3f63f983b9f3316f5)
Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
-rw-r--r-- | src/corelib/tools/qvarlengtharray.h | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h index bd38e2dcc1..9fa8990dbb 100644 --- a/src/corelib/tools/qvarlengtharray.h +++ b/src/corelib/tools/qvarlengtharray.h @@ -172,6 +172,13 @@ public: template <typename Predicate> qsizetype removeIf(Predicate pred); + void clear() + { + if constexpr (QTypeInfo<T>::isComplex) + std::destroy_n(data(), size()); + s = 0; + } + iterator erase(const_iterator begin, const_iterator end); iterator erase(const_iterator pos) { return erase(pos, pos + 1); } @@ -400,7 +407,10 @@ public: #endif void resize(qsizetype sz, const T &v) { Base::resize_impl(Prealloc, this->array, sz, v); } + using Base::clear; +#ifdef Q_QDOC inline void clear() { resize(0); } +#endif void squeeze() { reallocate(size(), size()); } using Base::capacity; |