gpt4 book ai didi

c++ - 可以同时容纳Foo *和std::shared_ptr 的类型

转载 作者:行者123 更新时间:2023-12-03 09:48:08 24 4
gpt4 key购买 nike

能够以相同类型存储std::shared_ptr或Foo *的最便捷方法是什么?

Foo* a = ...;
std::shared_ptr<Foo> b = ...;

Bar c = a; // Success, Bar type can hold Foo*
Bar d = b; // Success, Bar type can also hold std::shared_ptr<Foo>
std::variant >可以,但是无法直接取消引用它,这很烦人。有没有更好的办法?

最佳答案

只需使用std::shared_ptr<Foo>即可。
尽管它很少有用,但实际上您可以构造一个非所有者的非计数std::shared_ptr:

auto p = std::shared_ptr<Foo>{std::shared_ptr<void>(), raw_pointer};

如果您想迎合那些不尊重抽象的怪异的人(具体来说,请参见引用计数),则还可以在某个地方存放一个永恒的 anchor ,并使用该 anchor :
struct pass_t {
template <class... T>
constexpr int operator()(T&&...) noexcept
{ return 0; }
};
constexpr inline pass_t pass;

inline const std::shared_ptr<void> anchor {nullptr, pass};

auto p = std::shared_ptr<Foo>{anchor, raw_pointer};

关于c++ - 可以同时容纳Foo *和std::shared_ptr <Foo>的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65687151/

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