Как сделать динамическое хранилище объектов (c ++) - PullRequest
0 голосов
/ 22 ноября 2018

Я новичок в программировании и пытаюсь найти способ создать динамическое хранилище объектов моего класса голубей.Вот мой код:

class pigeon {
public:
    pigeon(std::string nameI);
    void outputInfo();
private:
    std::string name;
};

Идея состоит в том, что я хочу иметь возможность добавлять новый объект, иметь место для хранения его информации, затем иметь возможность добавлять другой объект и так далее.Я не знаю, с чего начать, или даже какую структуру данных использовать, у меня нет опыта хранения объектов.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2018

Как уже указывалось в комментариях, предпочтительно использовать контейнер, который обрабатывает его ресурсы в соответствии с 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.
0 голосов
/ 22 ноября 2018

Создайте вектор с указателем вашего класса:

std::vector<pigeon*> pigeons;

Затем выделите новый объект голубя и вставьте его в ваш вектор:

pigeon * pig = new pigeon("pigeon");
pigeons.push_back(pig);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...