[ox/std] Fix Vector copy assign not to assign to uninitialized memory

This commit is contained in:
Gary Talent 2022-02-26 03:02:16 -06:00
parent 21883a046e
commit 8d0bf40037

View File

@ -450,7 +450,7 @@ constexpr Vector<T, SmallVectorSize> &Vector<T, SmallVectorSize>::operator=(cons
m_cap = other.m_cap; m_cap = other.m_cap;
this->allocate(&m_items, other.m_cap); this->allocate(&m_items, other.m_cap);
for (std::size_t i = 0; i < m_size; i++) { for (std::size_t i = 0; i < m_size; i++) {
m_items[i] = other.m_items[i]; new (&m_items[i]) T(other.m_items[i]);
} }
} }
return *this; return *this;
@ -618,6 +618,7 @@ constexpr Result<typename Vector<T, SmallVectorSize>::template iterator<>> Vecto
for (auto i = pos; i < m_size; ++i) { for (auto i = pos; i < m_size; ++i) {
m_items[i] = std::move(m_items[i + 1]); m_items[i] = std::move(m_items[i + 1]);
} }
m_items[m_size].~T();
return begin() + pos; return begin() + pos;
} }
@ -628,6 +629,7 @@ constexpr Error Vector<T, SmallVectorSize>::unordered_erase(std::size_t pos) {
} }
--m_size; --m_size;
m_items[pos] = std::move(m_items[m_size]); m_items[pos] = std::move(m_items[m_size]);
m_items[m_size].~T();
return OxError(0); return OxError(0);
} }
@ -641,6 +643,7 @@ constexpr void Vector<T, SmallVectorSize>::expandCap(std::size_t cap) {
const auto itRange = ox::min(cap, m_size); const auto itRange = ox::min(cap, m_size);
for (std::size_t i = 0; i < itRange; ++i) { for (std::size_t i = 0; i < itRange; ++i) {
new (&m_items[i]) T(std::move(oldItems[i])); new (&m_items[i]) T(std::move(oldItems[i]));
oldItems[i].~T();
} }
this->deallocate(oldItems, oldCap); this->deallocate(oldItems, oldCap);
} }