我正在寻找一种如何使一个对象拥有另一个(多态!)对象的保存方法,该对象在构造函数中进行了初始化。
另外,我想使用 setter/getter 使其易于使用。

在扫描了几个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的双重使用使我感到怀疑...

那么问题是:这是将多态对象的所有权转移到另一个对象并使其可访问的首选方法吗?如果不是,最好的方法是什么?

最佳答案

看起来不错我将&&放在一个地方:

owner(std::unique_ptr<const owned> o) :

因为它不是必需的。

一个陷阱如果添加owner(owner&&)=default;,则owned有时可以为空。因此,检测该状态的方法是好的。

09-06 21:56