2012-03-11 6 views
0

У меня сложное время с абстрактными массивами. В моем случае я хочу иметь 2D-массив абстрактного класса с именем Base. Поэтому я сделал указатель на 2D-массив Base в классе под названием Container. Как получить доступ к элементам внутри массива? Кроме того, может кто-то подтвердить, что я правильно удаляю свой массив? Заранее благодарю за любую помощь!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[] их?

Вам нужно удалить каждый отдельный элемент, который не является такой же, как 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' и назначил указатели на пятна в массиве' databases' , Я должен удалить их. Это неправильно? Конечно, мне нужно удалить классы Derived, которые я создаю в какой-то момент? –

+0

К сожалению, 'базы [8] [8]' была опечаткой. Предполагается, что это 'базы [i] [j]'. –

+0

@AustinMoore Ах, да, ты прав. Я пропустил это. –

Смежные вопросы