У меня есть метод factory, который создает кучу объектов и возвращает указатели на них. Собственность на передачу объектов вызывающему:
std::vector<animal*> create_zoo();
Это работает, но подвержено утечке памяти.
auto zoo = create_zoo();
Вектор находится в стеке и автоматически очищается, а содержащиеся объекты - нет.
Возвращаются объекты различных подтипов. Сохранять значения вместо указателей не будет.
Я думал использовать
std::vector<std::unique_ptr<animal> > create_zoo();
но unique_ptr
не имеют семантики копии, и я возвращаю значение vector
по значению, которое теоретически создает копию.
Я мог бы положить vector
в кучу, чтобы избежать этого
std::unique_ptr<std::vector<std::unique_ptr<animal> > > create_zoo();
но это становится нелепым.
Это тоже должно работать:
std::vector<std::shared_ptr<animal> > create_zoo();
Это будет работать, но на самом деле это не переносит права собственности. Вызывающий должен предположить, что могут быть другие указатели на объекты.
Я открыт для предложений. не должно быть std::vector
. Я просто ищу хороший способ реализации factory, который возвращает право собственности на несколько объектов с современным С++. На данный момент я избегаю повышения. Я пытаюсь изучить новый материал С++ 11.