2012-03-11 68 views
0

我在抽象數組中遇到困難。在我目前的情況下,我想要一個名爲Base的抽象類的二維數組。所以我在一個名爲Container的類中創建了一個指向二維數組Base的指針。如何訪問數組內的項目?另外,有人可以確認我正在刪除我的陣列嗎?預先感謝任何幫助!抽象類的二維數組?

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 2012-03-11 22:38:59

+0

@moshbear我沒有。我會試試 – 2012-03-11 22:39:44

+0

@moshbear那麼'shared_ptr'只能處理我的內存分配問題嗎? – 2012-03-11 23:09:35

回答

2

這裏沒有數組到delete[]。你沒有new[]任何數組,你爲什麼要delete[]他們?

你需要刪除每個元素,這是不一樣的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

我認爲,因爲我用'new'創建了派生類,並將指針指派給'bases'數組中的點,我將不得不刪除它們。這是不正確的?當然,我必須刪除我在某個時刻實例化的派生類? – 2012-03-11 22:41:47

+0

對不起,'基地[8] [8]'是一個錯字。它應該是'基地[我] [j]'。 – 2012-03-11 22:43:15

+0

@AustinMoore啊,是的,你說得對。我錯過了。 – 2012-03-11 22:43:49