Я пишу для платформы, которая не имеет встроенной STL, но поддерживает шаблоны
Я работаю над собственной реализацией std :: vector.
template<typename T> class Array
{
private:
T * buffer;
int count;
int capacity;
public:
Array() : buffer(0), count(0), capacit(0) { }
~Array() { if(buffer) delete[] buffer; }
void IN_ANY Reserve(const int capacity)
{
if(capacity >= count)
{
T * newBuff = new T[capacity];
if(capacity > count)
memset(newBuff+count, 0, (capacity-count) * sizeof(T));
memcpy(newBuff, buffer, count * sizeof(T));
if(buffer)
delete [] buffer;
buffer = newBuff;
this->capacity = capacity;
}
}
// Other methods...
}
Проблема возникает, когда T имеет нетривальный конструктор, нетривальное разрушение и перегруженный оператор =.Затем, при резервировании дополнительной памяти для массива, будут вызваны деструкторы для T, а не для конструкторов.Но не конструктор копирования (так как я использовал memcpy).Как я могу улучшить Резервный метод?