В настоящее время я храню коллекцию std::unique_ptr
s для кучи выделенных объектов полиморфа c типа:
struct Foo {
virtual ~Foo() = default;
};
Collection<std::unique_ptr<Foo>> foos;
Базовый интерфейс c, который мне нужен - это установка / получение владельцев. Foo
в / из foos
. Объекты, хранящиеся в foos
, никогда не должны быть nullptr
, поэтому я хотел бы заменить время выполнения assert(owner_taken)
проверками во время компиляции. Более того, я хотел бы иметь возможность использовать ненулевые владельцы в контексте, где можно ожидать обнуляемого.
Возможно, мне нужно хранить что-то вроде unique_ref
, но как мне извлечь его из foos
? Мне не нужна копия, я хочу сам хранимый объект, поэтому owner->clone()
не является решением. Я тоже не могу std::move(owner)
, потому что впоследствии состояние «уникальной ссылки» будет недействительным.
Есть ли чистое решение по проекту?