Извините за путаницу тему, это был оригинальный вопрос:C++ производный класс массив Перераспределение
Как перераспределить массив указателей на базовый класс, который на самом деле точки в различных производных классов?
я не должен использовать динамическое произнесение, TypeId или RTTI здесь, если это возможно ..
EDIT Я просто понял, что я мог бы попробовать сохранить элементы массива и просто устанавливая указатели в новом массиве на старые элементы .. Но тогда как сделать operator = или Cctor?
Или:
Как перераспределить этот массив «плохой путь», на самом деле копирование элементов?
Пример:
class Base {...}
class Derived1 : public Base {...}
class Derived2 : public Base {...}
int main()
{
int arrayLength=0, arrayMaxLength=3;
Base **array=new Base*[arrayMaxlength];
array[0]=new Derived1();
array[1]=new Derived2();
//Reallocation starts...
Base **tmp=new Base*[arrayMaxLength*=2];
for(int i=0;i<arrayLength;i++)
tmp[i]=new Base(*array[i]); //<------ What to put here instead of Base?
//The unimportant rest of Reallocation..
for(int i=0;i<arrayLength;i++)
delete array[i];
delete [] array;
array=tmp;
}
Спасибо, я просто понял, что сам .. Но что делать в копии конструктор или оператор =? мне нужно как-то скопировать туда элементы. –
Если вам действительно нужно сделать копию элементов, лучшим способом было бы предоставить виртуальный метод 'copy' или' clone', который возвращает вновь выделенный объект, который является копией оригинала: вам нужно переопределить его с помощью правильная логика для каждого производного calss. Вы можете увидеть пример в [этот разговор] (http://en.allexperts.com/q/C-1040/constructor-virtual.htm) – Attila
Отлично, спасибо! –