Hi,
I made a very simple container class because I need a vector where I can remove elements in the middle without changing the position of the other elements but I am worried that it doesn't free up everything when I delete it. Here is the code:
template <typename T>
class Vector
{
private:
T* elements;
int elementCount;
int elementCapacity;
int freeElement; // first free element
int* freeElementList; // each array element is the index of the next free element
public:
Vector(int initialCapacity) {
elementCount = 0;
elementCapacity = initialCapacity;
elements = (T*)malloc(elementCapacity * sizeof(T));
freeElement = 0;
freeElementList = (int*)malloc(elementCapacity * sizeof(int));
for (int i = 0; i < elementCapacity; ++i)
freeElementList[i] = i + 1;
}
~Vector() {
free(freeElementList);
free(elements);
}
int addElement(T& element) {
if (elementCount == elementCapacity) {
elementCapacity *= 2;
int* oldFreeElementList = freeElementList;
freeElementList = (int*)malloc(elementCapacity * sizeof(int));
memcpy(freeElementList, oldFreeElementList, elementCount * sizeof(int));
free(oldFreeElementList);
for (int i = elementCount; i < elementCapacity; ++i)
freeElementList[i] = i + 1;
T* oldElements = elements;
elements = (T*)malloc(elementCapacity * sizeof(T));
memcpy(elements, oldElements, elementCount * sizeof(T));
free(oldElements);
}
elements[freeElement] = element;
int result = freeElement;
freeElement = freeElementList[freeElement];
elementCount++;
return result;
}
void removeElement(int index) {
freeElementList[index] = freeElement;
freeElement = index;
elementCount--;
}
T getElement(int index) {
return elements[index];
}
};
For example if I use it to store STL vectors will the destructor actually delete all their elements?
EDIT: sorry, I forgot to set the right title. It was supposed to be something like "C++ custom container"