指向数组的指针(动态分配)

时间:2014-01-27 17:35:24

标签: c++ arrays pointers

我正在用C ++写一个纸牌游戏。我有一个游戏课程,可以跟踪玩家。我还有一个抽象基类 player person computer 这些类派生自。

我想让玩家保持阵列状态。在编译时,玩家的数量是未知的。因为有些玩家是人和其他计算机,我需要一个玩家指针,存储在一个阵列中,这是动态分配的,因为玩家的数量是未知的,对吗?

由于我对C ++比较陌生,我无法弄清楚语法是如何看待这种事情的。

3 个答案:

答案 0 :(得分:2)

对于动态数组,标准库提供std::vector

由于您需要存储指向抽象基类型的指针,而不是对象本身,因此您需要确保正确管理对象的生命周期。最简单的方法是存储智能指针(在本例中为{3}},用于简单的单一所有权),这样当对象从向量中移除时会自动销毁。

所以你的数组看起来像

// Declaration
std::vector<std::unique_ptr<player>> players;

// Adding players
players.push_back(std::unique_ptr<person>(new person("Human"))); // C++11
players.push_back(std::make_unique<computer>("CPU"));            // C++14 (hopefully)

// Accessing players
for (auto & player : players) {
    player->play();
}

答案 1 :(得分:1)

你需要

std::vector<std::shared_ptr<Player>> players;

如果你想使用标准库(你应该使用)

,否则

Player** players;

答案 2 :(得分:0)

您可以使用以下

声明指针变量
Player *playerptr;

这意味着playerptr是一个指向Player类型的指针。它可以包含一个Player的地址以及一个Players数组。在C ++和C数组中实现为指向数组第一个元素的指针。

根据您的要求,您可以动态分配数组。

playerptr=new Player[20];

这里20是数组的大小。

playerptr=new Player[20]();

第二种语法将数组中的所有元素初始化为默认值。