Поскольку вы удалили как копирование, так и перемещение конструкторов / операторов присваивания, ответ таков: вы не можете использовать такой vector
любым разумным способом.Без копирования или перемещения в качестве опции вы в лучшем случае сможете предварительно reserve
пробел один раз и emplace_back
в vector
, но все, что может впоследствии изменить емкость, или в любомперестановка элементов была бы недопустимой (поскольку это подразумевало бы использование операций перемещения или копирования).
Как уже упоминалось в комментариях, вы можете создать vector
умных указателей, где только умныеуказатель должен быть перемещен / скопирован, а не экземпляр Res
, на который он указывает, и получить полностью функциональный vector
.Например, с std::unique_ptr
ваш класс может быть реализован как:
class ResourceCache{
....
const Res& GetRes(size_t index) {
return *resources_.at(index); // Can still provide const references at API level
}
std::vector<std::unique_ptr<Res>> resources_;
}
, и вы просто используете resources_.push_back(std::make_unique<Res>(...args to Res constructor...))
для создания / вставки элементов в resources_
, а не resources_.push_back(Res(...args to Res constructor...))
.