所以这是我的问题。我有一个multidimessional数组,我试图把一些从Block类派生的对象。我有这个multidimessional数组声明如下:
Block ***arrTerrain;
其中第一个''用于行,第二个''用于collumns,第三个用于指向位置内对象的指针(让我们假设它是一个名为FreeTerrain的对象)。
我用这种方式初始化:
this->arrTerrain = new Block**[a];
for(int i=0;i < a ;i++){
arrTerrain[i] = new Block*[l];
}
for(int i=0;i<a;i++)
for(int j=0;j<l;j++)
arrTerrain[i][j] = new FreeTerrain;
我应该让士兵处于一个给定的位置(班级士兵也来自街区)。如果我想把2名士兵放在同一个位置,我会失去指向第一个的指针(obviusly)。所以我想在每个位置都有一个Blocks或somesort的向量,但我发现这很难实现。
你们中的任何人都可以帮助我吗?
提前致谢!!
答案 0 :(得分:2)
答案是肯定的,你可以制作(几乎)任何东西的载体。
现在隐含的问题是&#34;我应该制作一个Object ***&#34;答案是nooooooo。
首先,你必须在必要时使用指针。如果您的FreeTerrain
数组都是同一个类,那么不要使用new来创建FreeTerrain
数组。
你不应该在一个向量中保存一个数组,这只是在寻找麻烦。
总的来说,您应该使用std::vector<std::vector<FreeTerrain>>
。
编辑:从下面的注释中,如果你真的需要使用指针(比如说,要有多态引用),请使用唯一的指针:
std::vector<std::vector<std::unique_ptr<FreeTerrain>>> v;