Как уже указывалось в комментариях, предпочтительно использовать контейнер, который обрабатывает его ресурсы в соответствии с RAII / RDID-idiom («Приобретение ресурсов - инициализация» / «Уничтожение ресурсов - это удаление»)) так что вам не нужно беспокоиться об этом самостоятельно.Это также простой способ предотвращения утечек ресурсов при возникновении исключения.
Один из обычно используемых контейнеров стандартной библиотеки C ++ - std::vector<>
.
Вы бы использовали это так (просто чтобы дать вам начальную идею, пожалуйста, обратитесь к документации для дальнейшего объяснения и примеров):
#include <vector>
// ...
{
std::vector<pigeon> pigeons;
pigeons.push_back("Karl"); // add three pigeons
pigeons.push_back("Franz"); // at the end of the
pigeons.push_back("Xaver"); // vector
pigeons[1]; // access "Franz"
for(auto /* maybe const */ &p : pigeons) { // iterate over the vector
// do something with pigeon p
}
} // pigeons goes out of scope, its destructor is called which
// takes care of deallocating the memory used by the vector.