2012-03-11 12 views
0

抽象的な配列では苦労しています。私の現在のケースでは、Baseという抽象クラスの2D配列を作成したいと考えています。そこで、Containerというクラスの中で、Baseという2次元配列へのポインタを作成しました。配列内のアイテムにアクセスするにはどうすればよいですか?また、誰かが私のアレイを正しく削除していることを確認できますか?助けをあらかじめありがとう!抽象クラスの2D配列ですか?

class Base 
{ 
public: 
    virtual void abstract() = 0; 
}; 

//---------------------------------- 

class Derived : public Base 
{ 
public: 
    virtual void abstract(); 
}; 

void Derived::abstract() 
{ 
    // empty 
} 

//---------------------------------- 

class Container 
{ 
public: 
    Board(); 
    virtual ~Board(); 
    Base* bases[8][8]; 
}; 

// Constructor 
Container::Container() 
{ 
    for (int i = 0; i < 8; i++) 
     for (int j = 0; j < 8; j++) 
      bases[i][j] = new Derived(); 
} 

// Destructor 
Container::~Container() 
{ 
    for (int i = 0; i < 8; i++) 
     delete [] bases[i]; 
    delete [] bases; 
} 

//---------------------------------- 

int main() 
{ 
    Container container; 
} 
+0

'std :: vector >>'を試しましたか? – moshbear

+0

@moshbear私はしていません。私はそれを試してみます –

+0

@moshbear 'shared_ptr'は私のメモリ割り当ての問題だけを処理しますか? –

答えて

2

delete[]の配列はありません。あなたはnew[]配列を持っていません、どうしてあなたはdelete[]でしょうか?

あなたはに配列をINGのdelete[]と同じではありません。個々の要素、削除する必要があります:

for (int i = 0; i < 8; i++) 
    for (int j = 0; j < 8; j++) 
     delete bases[i][j]; 

をそして、あなたのBaseは仮想デストラクタを持っていることを確認してください!


bases[8][8] = new Derived(); 

メールで送信。配列のインデックスは最大7にしかなりません!私はbases[i][j] = new Derived()と書こうと思っています。

+0

' Derived'クラスを 'new'で作成し、' bases'配列のスポットへのポインタを割り当てたので、 、私はそれらを削除する必要があります。これは間違っていますか?確かに、ある時点でインスタンス化する 'Derived'クラスを削除する必要がありますか? –

+0

申し訳ありません、 'bases [8] [8]'はタイプミスです。それは ''塩基[i] [j] 'であるはずです。 –

+0

@AustinMooreああ、ええ、あなたは正しい。私は逃しました。 –