我在使用抽象数组时遇到了困难。在我目前的情况下,我想要一个名为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 :(得分: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()
。