diff --git a/spine-cpp/spine-cpp/include/spine/ContainerUtil.h b/spine-cpp/spine-cpp/include/spine/ContainerUtil.h index 641e9621c..6f9b85245 100644 --- a/spine-cpp/spine-cpp/include/spine/ContainerUtil.h +++ b/spine-cpp/spine-cpp/include/spine/ContainerUtil.h @@ -126,7 +126,7 @@ namespace Spine { T* item = items[i]; - FREE(item); + DESTROY(T, item); items.erase(i); } diff --git a/spine-cpp/spine-cpp/include/spine/Extension.h b/spine-cpp/spine-cpp/include/spine/Extension.h index 770749a25..d5633d8bc 100644 --- a/spine-cpp/spine-cpp/include/spine/Extension.h +++ b/spine-cpp/spine-cpp/include/spine/Extension.h @@ -38,6 +38,9 @@ /* Frees memory. Can be used on const types. */ #define FREE(VALUE) spineFree((void*)VALUE) +/* Call destructor and then frees memory. Can be used on const types. */ +#define DESTROY(TYPE,VALUE) VALUE->~TYPE(); spineFree((void*)VALUE) + #include namespace Spine diff --git a/spine-cpp/spine-cpp/include/spine/HashMap.h b/spine-cpp/spine-cpp/include/spine/HashMap.h index 26dd90bf1..372131a11 100755 --- a/spine-cpp/spine-cpp/include/spine/HashMap.h +++ b/spine-cpp/spine-cpp/include/spine/HashMap.h @@ -31,7 +31,7 @@ #ifndef Spine_HashMap_h #define Spine_HashMap_h -#include +#include namespace Spine { @@ -95,10 +95,10 @@ namespace Spine _trailer(), _hashSize(0) { - _hashTable = new Entry[capacity]; + _hashTable.reserve(capacity); for (int i = 0; i < _capacity; ++i) { - _hashTable[i] = Entry(); + _hashTable.push_back(Entry()); } _header.prev = &_header; @@ -109,8 +109,6 @@ namespace Spine ~HashMap() { - delete [] _hashTable; - _hashSize = 0; } @@ -150,7 +148,8 @@ namespace Spine size_t index = hash(key); - Entry* entry = new Entry(); + Entry* entry = MALLOC(Entry, 1); + new (entry) Entry(); entry->_key = key; entry->_value = value; @@ -258,7 +257,7 @@ namespace Spine pos._entry->next->prev = pos._entry->prev; } - delete pos._entry; + DESTROY(Entry, pos._entry); } else if (_hashTable[index].next == pos._entry) { @@ -274,7 +273,7 @@ namespace Spine pos._entry->next->prev = pos._entry->prev; } - delete pos._entry; + DESTROY(Entry, pos._entry); } else if (_hashTable[index].prev == pos._entry) { @@ -290,14 +289,14 @@ namespace Spine pos._entry->next->prev = pos._entry->prev; } - delete pos._entry; + DESTROY(Entry, pos._entry); } else { pos._entry->prev->next = pos._entry->next; pos._entry->next->prev = pos._entry->prev; - delete pos._entry; + DESTROY(Entry, pos._entry); } _hashSize--; @@ -332,7 +331,7 @@ namespace Spine const H _hashFunction; const size_t _capacity; - Entry* _hashTable; + Vector _hashTable; Entry _header; Entry _trailer; size_t _hashSize; diff --git a/spine-cpp/spine-cpp/include/spine/Vector.h b/spine-cpp/spine-cpp/include/spine/Vector.h index 11467a7af..ec25ecb84 100644 --- a/spine-cpp/spine-cpp/include/spine/Vector.h +++ b/spine-cpp/spine-cpp/include/spine/Vector.h @@ -184,7 +184,7 @@ namespace Spine void deallocate(T* buffer) { - free(buffer); + FREE(buffer); } void construct(T* buffer, const T& val)