我正在寻找一种保存干净的方法,使一个对象拥有另一个(多态!)对象,并在构造函数中对其进行初始化。 另外,我想使用吸气剂来访问它。
在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
的双重使用使我感到怀疑……
问题是:这是将多态对象的所有权转移到另一个对象并使其可访问的首选方法吗?如果不是,那么 的最佳方法是什么?
答案 0 :(得分:1)
看起来不错。我将&&
放在一个地方:
owner(std::unique_ptr<const owned> o) :
因为不需要。
一个陷阱;如果添加owner(owner&&)=default;
,则owned
有时可以为空。因此,检测该状态的方法很好。