diff --git a/src/juce_core/containers/juce_ArrayAllocationBase.h b/src/juce_core/containers/juce_ArrayAllocationBase.h index baafd8ce1e..da0ae4f997 100644 --- a/src/juce_core/containers/juce_ArrayAllocationBase.h +++ b/src/juce_core/containers/juce_ArrayAllocationBase.h @@ -70,8 +70,7 @@ protected: /** Destructor. */ ~ArrayAllocationBase() throw() { - if (elements != 0) - juce_free (elements); + delete[] elements; } //============================================================================== @@ -86,23 +85,26 @@ protected: { if (numAllocated != numElements) { - numAllocated = numElements; - if (numElements > 0) { - if (elements == 0) - elements = (ElementType*) juce_malloc (sizeof (ElementType) * numElements); - else - elements = (ElementType*) juce_realloc (elements, sizeof (ElementType) * numElements); + ElementType* const newElements = new ElementType [numElements]; + + const int itemsToRetain = jmin (numElements, numAllocated); + + for (int i = 0; i < itemsToRetain; ++i) + newElements[i] = elements[i]; + + delete[] elements; + elements = newElements; + } - else + else if (elements != 0) { - if (elements != 0) - { - juce_free (elements); - elements = 0; - } + delete[] elements; + elements = 0; } + + numAllocated = numElements; } }