gpt4 book ai didi

c++ - 如何正确地使一个对象拥有另一个多态对象?

转载 作者:行者123 更新时间:2023-11-30 04:52:25 26 4
gpt4 key购买 nike

我正在寻找一种保存和干净的方法来使一个对象拥有另一个(多态!)对象,它在构造函数中被初始化。此外,我想让它可以通过 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 有时可能是空的。因此,有一种方法可以检测该状态。

关于c++ - 如何正确地使一个对象拥有另一个多态对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54384211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com