diff --git a/openVulkanoCpp/Data/Containers/StableVector.hpp b/openVulkanoCpp/Data/Containers/StableVector.hpp index 38f8f9b..b6044cb 100644 --- a/openVulkanoCpp/Data/Containers/StableVector.hpp +++ b/openVulkanoCpp/Data/Containers/StableVector.hpp @@ -25,7 +25,7 @@ namespace OpenVulkano { /** - * @class Stable Vector + * @class StableVector * @brief Stable Vector is an alternative version for std::vector that provides chunk based memory allocation without re-aligning * * @throw Please know that this vector creates array gaps when you remove an element. @@ -266,8 +266,19 @@ namespace OpenVulkano return; // return? or make } - m_lastChunk->m_data[m_lastChunk->m_nextIndex - 1].~T(); - m_lastChunk->m_occupiedIndices[m_lastChunk->m_nextIndex - 1] = false; + if (m_lastChunk->m_nextIndex == 1 && m_lastChunk != m_firstChunk) + { + VectorChunk* temp = m_lastChunk; + m_lastChunk = m_lastChunk->m_prev; + m_lastChunk->m_next = nullptr; + temp->~VectorChunk(); + ::operator delete(temp); + return; + } + + m_lastChunk->m_nextIndex--; + m_lastChunk->m_data[m_lastChunk->m_nextIndex].~T(); + m_lastChunk->m_occupiedIndices[m_lastChunk->m_nextIndex] = false; m_lastChunk->m_size--; m_lastChunk->m_gapCount++; m_size--;