Я работаю над классом с членом std::vectorstd::unique_ptr и мне нужен совет о лучших практиках его раскрытия через геттер. Вот мои вопросы: [list] [*]Текущая реализация: Это мой метод получения, но он кажется многословным. Есть ли более чистый или более идиоматический способ добиться этого? [code] public: [[nodiscard]] std::ranges::view auto get_drawables() const { return drawables_ | std::views::transform([](const auto& drawable) { return drawable.get(); }); }
private: std::vector drawables_; [/code]
[*]Право собственности на вектор: [list] Должен ли я хранить элементы по значение, необработанные указатели или интеллектуальные указатели? [*]В настоящее время я использую std::unique_ptr, так как не собираюсь делить владение. Правильный ли это выбор? [/list]
[*]Выявление переносчика: [list] Я хочу, чтобы вызывающие абоненты:
перебирали элементы (возможно, более одного раза). [*]изменяли объекты внутри вектора. [/list]
[*]Я не хотят, чтобы вызывающие абоненты: [list] Изменяли экземпляры std::unique_ptr. [*]Добавляли или удаляли элементы в векторе.[/list]
[*]Должен ли я действительно предоставлять необработанные указатели, чтобы не подразумевать владение? [*]Могу ли я использовать std ::span каким-то образом, поскольку базовое хранилище действительно является смежным (std::vector)?