我可以在对象 *** p 中拥有一个指针向量吗?

问题描述 投票:0回答:1

这是我的问题:我有一个多维数组,我试图在其中放入一些从类

Block
派生的对象。我用以下方式声明了这个多维数组:

Block ***arrTerrain;

其中第一个“”用于行,第二个“”用于列,第三个用于指向该位置内对象的指针(假设它是一个名为

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 个士兵放在同一位置,我就会丢失指向第一个士兵的指针(显然)。所以我想到在每个位置都有一个块向量或某种类型,但我发现这很难实现。

你们有人可以帮我吗?

提前致谢!

c++ pointers vector
1个回答
2
投票

答案是肯定的,你可以制作(几乎)任何东西的向量。

现在隐含的问题是“我应该创建一个对象 *** 的向量吗”,答案是否定的。

首先,只有在必要时才应该使用指针。如果你有一个

FreeTerrain
数组,它们都是同一类,不要对它们使用 new,只需创建一个
FreeTerrain
数组即可。

而且你不应该将数组保存在向量中,那只是自找麻烦。

总的来说,您应该只使用

std::vector<std::vector<FreeTerrain>>

编辑:从下面的评论中,如果您确实需要使用指针(例如,具有多态引用),请使用唯一的指针:

 std::vector<std::vector<std::unique_ptr<FreeTerrain>>> v;
© www.soinside.com 2019 - 2024. All rights reserved.