lundi 20 juillet 2020

How to free memory allocated by new[]?

I'm currently trying to create vector-like container. It uses memory allocated by new[] as it's base. the problem arises when I need to expand the array. I allocate a bigger chunk of memory with new[], then memcpy old memory into there and delete[] the old memory. Thing is, trying to store any pointer or any pointer-containing object inside result in memory corruption. So I need a way to free the memory used without destroying objects inside

Edit: Some code to understand the problem:

template<typename T>
class myvector
{
private:
 T* _data;
 size_t _size, _capacity;
 static constexpr float multiplier = 1.5;
public:

void expand()
{
    size_t e_size = sizeof(T);
    size_t old_capacity = this->_capacity;
    this->_capacity = (unsigned long)(float(this->_capacity) * myvector::multiplier);
    T *tmp = new T[this->_capacity];
    memcpy(tmp, this->_data, e_size * (old_capacity));
    // this will destroy all the objects inside the container
    // which will result in destruction of any allocated memory
    delete[] this->_data; 
    // so now we have an array of invalid pointers. fun time
    this->_data = tmp;
}
}

Aucun commentaire:

Enregistrer un commentaire