gpt4 book ai didi

c++ - 使用 std::shared_ptr 指向任何东西

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:07:30 25 4
gpt4 key购买 nike

我正在使用 std::shared_ptr<void>在我的应用程序中制作一个智能指针,它可以指向许多不同类型的数据结构,如结构、 vector 、矩阵……基本上任何东西。我要做的是将一些名称映射到它们的数据结构。

我正在使用哈希表执行映射:

std::unordered_map<std::string, std::shared_ptr<void>>

我可以投 std::shared_ptr<void> 吗?由 find() 返回返回std::shared_ptr<my_type> ?如果是,怎么办?

更重要的是,这是好的做法吗?随着应用程序的扩展,这会不会增加太多的复杂性?或者,还有其他一些完全不同的优雅方法吗?

编辑

可能不能使用 `Boost.Any',因为它使用 RTTI。

也不能为所有这些数据结构使用基类,因为其中一些是 STL 容器,如 std::vector .

关于 shared_ptr delete 在下面的答案中讨论的问题,我读到 shared_ptr 执行类型删除并存储类型信息以了解调用哪个析构函数。

Shared void pointers. Why does this work?

Why do std::shared_ptr<void> work

Why is shared_ptr<void> not specialized?

但我不确定。

最佳答案

这不是好的做法。如果您不在 std::shared_ptr 旁边存储其他类型信息(你可以使用 static_pointer_cast 进行转换)你周围都有未定义的行为。也许Boost.Any是你的选择吗?

如果你想坚持使用 std::shared_ptr<void>请记住提供自定义删除器功能(参见 make shared_ptr not use delete)。

关于c++ - 使用 std::shared_ptr<void> 指向任何东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22654422/

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