diff options
Diffstat (limited to 'yapf/fixedsizearray.hpp')
-rw-r--r-- | yapf/fixedsizearray.hpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/yapf/fixedsizearray.hpp b/yapf/fixedsizearray.hpp index 5d6c3b313..48b177f3c 100644 --- a/yapf/fixedsizearray.hpp +++ b/yapf/fixedsizearray.hpp @@ -51,12 +51,21 @@ struct CFixedSizeArrayT { // release one reference to the shared block if ((--RefCnt()) > 0) return; // and return if there is still some owner + Clear(); + // free the memory block occupied by items + free(((int8*)m_items) - ThdrSize); + m_items = NULL; + } + + /** Clear (destroy) all items */ + FORCEINLINE void Clear() + { // walk through all allocated items backward and destroy them for (Titem* pItem = &m_items[Size() - 1]; pItem >= m_items; pItem--) { pItem->~Titem_(); } - free(((int8*)m_items) - ThdrSize); - m_items = NULL; + // number of items become zero + SizeRef() = 0; } protected: |