2D массив абстрактного класса? - PullRequest
0 голосов
/ 12 марта 2012

Мне тяжело с абстрактными массивами. В моем текущем случае я хочу иметь двумерный массив абстрактного класса с именем Base. Поэтому я сделал указатель на двумерный массив Base в классе с именем Container. Как мне получить доступ к элементам внутри массива? Кроме того, кто-то может подтвердить, что я удаляю свой массив правильно? Заранее спасибо за любую помощь!

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;
}

1 Ответ

2 голосов
/ 12 марта 2012

Здесь нет массивов для 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();

Ooops.Индексы массива только до 7!Я подозреваю, что вы намеревались написать bases[i][j] = new Derived().

...