Указатель на массив указателей (динамическое размещение)

Я пишу карточную игру на C ++. у меня есть игра класс, который отслеживает игроков. У меня также есть абстрактный базовый класс игрок, из которого уроки человек а также компьютер происходит.

Я хотел бы держать игроков в массиве. Количество игроков неизвестно во время компиляции. Поскольку некоторые игроки — это люди и другие компьютеры, мне нужен указатель игрока для каждого из них, который хранится в массиве, который распределяется динамически, поскольку число игроков неизвестно, верно?

Поскольку я относительно новичок в C ++, я не мог понять, как выглядит синтаксис для такого рода вещей.

0

Решение

Для динамического массива стандартная библиотека обеспечивает std::vector.

Поскольку вам нужно хранить указатели на абстрактный базовый тип, а не на сами объекты, вам необходимо убедиться, что вы правильно управляете временем жизни объекта. Самый простой способ — хранить умные указатели (в данном случае std::unique_ptr, для простого единоличного владения), чтобы объекты автоматически уничтожались при удалении из вектора.

Таким образом, ваш массив будет выглядеть

// 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();
}
2

Другие решения

тебе нужно

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

если вы хотите использовать стандартную библиотеку (что вы должны)

иначе

Player** players;
1

Вы можете объявить переменную указателя используя следующее

Player *playerptr;

Это означает, что playerptr является указателем на тип Player. Он может содержать адрес Player, а также массив Players. В C ++ и C массив реализован как указатель на первый элемент массива.

А согласно вашему требованию вы можете динамически распределять массив.

playerptr=new Player[20];

Здесь 20 — размер массива.

playerptr=new Player[20]();

Второй синтаксис инициализирует все элементы в массиве к их значению по умолчанию.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector