diff options
author | Liang Qi <liang.qi@qt.io> | 2017-02-24 19:57:17 +0100 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2017-02-24 20:01:42 +0100 |
commit | de49839df8abfba1f3ed3c36ef3177e4a9d6ef00 (patch) | |
tree | 71e777ca1e33c58edd9149821e970495ef4b75b2 /src/corelib/tools/qvarlengtharray.h | |
parent | e6234535929c67e7fbfa1ad7ce88f37df0b68d45 (diff) | |
parent | 4d3781b640e8fb0a04e96b2d05199247556b8d86 (diff) |
Merge remote-tracking branch 'origin/5.8' into 5.9
Conflicts:
mkspecs/features/moc.prf
Change-Id: Ia71c8e3b3185f7c999bf226d0675051b10b8740b
Diffstat (limited to 'src/corelib/tools/qvarlengtharray.h')
-rw-r--r-- | src/corelib/tools/qvarlengtharray.h | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/corelib/tools/qvarlengtharray.h b/src/corelib/tools/qvarlengtharray.h index 25f5176c22..ae2c75e7df 100644 --- a/src/corelib/tools/qvarlengtharray.h +++ b/src/corelib/tools/qvarlengtharray.h @@ -146,15 +146,25 @@ public: T value(int i, const T &defaultValue) const; inline void append(const T &t) { - if (s == a) // i.e. s != 0 + if (s == a) { // i.e. s != 0 + T copy(t); realloc(s, s<<1); - const int idx = s++; - if (QTypeInfo<T>::isComplex) { - new (ptr + idx) T(t); + const int idx = s++; + if (QTypeInfo<T>::isComplex) { + new (ptr + idx) T(std::move(copy)); + } else { + ptr[idx] = std::move(copy); + } } else { - ptr[idx] = t; + const int idx = s++; + if (QTypeInfo<T>::isComplex) { + new (ptr + idx) T(t); + } else { + ptr[idx] = t; + } } } + void append(const T *buf, int size); inline QVarLengthArray<T, Prealloc> &operator<<(const T &t) { append(t); return *this; } |