diff options
Diffstat (limited to 'libs/kstd/include')
| -rw-r--r-- | libs/kstd/include/kstd/vector | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/libs/kstd/include/kstd/vector b/libs/kstd/include/kstd/vector index b2cce0b..1242489 100644 --- a/libs/kstd/include/kstd/vector +++ b/libs/kstd/include/kstd/vector @@ -594,12 +594,14 @@ namespace kstd { auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2; auto new_data = allocate_n(new_capacity); + auto old_size = size(); std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, value); uninitialized_move_with_allocator(begin(), new_data, size()); destroy_n(begin(), size()); deallocate(); m_data = new_data; m_capacity = new_capacity; + m_size = old_size; } else { @@ -615,12 +617,14 @@ namespace kstd { auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2; auto new_data = allocate_n(new_capacity); + auto old_size = size(); std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, std::move(value)); uninitialized_move_with_allocator(begin(), new_data, size()); destroy_n(begin(), size()); deallocate(); m_data = new_data; m_capacity = new_capacity; + m_size = old_size; } else { @@ -637,12 +641,14 @@ namespace kstd { auto new_capacity = m_capacity == 0 ? 1 : m_capacity * 2; auto new_data = allocate_n(new_capacity); + auto old_size = size(); std::allocator_traits<allocator_type>::construct(m_allocator, new_data + m_size, std::forward<Args>(args)...); uninitialized_move_with_allocator(begin(), new_data, size()); destroy_n(begin(), size()); deallocate(); m_data = new_data; m_capacity = new_capacity; + m_size = old_size; } else { |
