Если бы это был я, я бы выделил массив ONE*
с таким образом:
pointers = new ONE*[reserve];
Я бы устроил так, чтобы первые несколько членов массива pointers
указывали на действительные ОДНЫЕ объекты.Последние оставшиеся члены будут равны нулю (необязательно, так как они никогда не будут разыменованы).
Когда мне нужно было увеличить массив, я бы назвал new с большим размером:
newPointers = new ONE*[newReserve];
и я бы скопировал все указатели из предыдущего массива в новый массив.
void
LISTOFONES::push_back(const ONE& one) {
if(_size>=_reserve) {
std::size_t newReserve = _reserve?(_reserve*2):1;
ONE** newPointers = new ONE*[newReserve];
std::copy(this->pointers, this->pointers+_size, newPointers);
std::fill(newPointers+_size, newPointers+newReserve, (ONE*)0);
std::swap(this->pointers, newPointers);
_reserve = newReserve;
delete[] newPointers;
}
this->pointers[_size] = new ONE(one);
++_size;
}