1
對不起混淆主題,這是原來的問題:C++派生類陣列再分配
如何重新分配指針的基類的陣列,實際上 指向不同派生類?
我不應該如果可能的話在這裏使用動態轉換,typeid設定或RTTI ..
編輯我才意識到我可以嘗試保存數組元素,只是設置在指針數組新老元素..但那麼如何做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;
}
謝謝你,我只是意識到自己..但是在副本怎麼做構造函數或運算符=?我需要以某種方式複製那裏的元素。 – 2012-04-14 12:42:00
如果實際需要製作元素的副本,最好的方法是提供一個'copy'或'clone'虛擬方法,返回一個新分配的對象,該對象是原始副本:您需要用每個派生類的適當邏輯。你可以在[本次對話]中看到一個例子(http://en.allexperts.com/q/C-1040/constructor-virtual.htm) – Attila 2012-04-14 12:48:12
完美,謝謝! – 2012-04-14 12:55:29