Я ищу безопасный и чистый способ заставить объект владеть другим (полиморфным!) Объектом, с которым он инициализируется в конструкторе.Кроме того, я хочу сделать его доступным с помощью геттера.
После сканирования нескольких блогов и постов на SO, я предполагаю, что лучше всего это сделать с помощью std::unique_ptr
и выяснил это:
#include <memory>
class owned {};
class owner {
const std::unique_ptr<const owned> m_owned;
public:
owner(std::unique_ptr<const owned>&& o) : m_owned{ std::move(o) } {}
const owned& owned() const { return *m_owned; }
};
int main() {
std::unique_ptr<owned> _owned{ std::make_unique<owned>(owned()) };
owner _owner(std::move(_owned));
}
Однако я не очень знаком с деталями std::unique_ptr
и поэтому не уверен, является ли это хорошим способом реализовать мою идею.Особенно двойное использование std::move
заставляет меня сомневаться ...
Итак, вопрос: Является ли это предпочтительным способом передачи права собственности на полиморфный объект другому объекту и обеспечения его доступности?Если нет, то является лучшим способом сделать это?