Bru*_*uce 5 c++ stl smart-pointers shared-ptr c++11
我正在std::shared_ptr<void>我的应用程序中使用一个智能指针,它可以指向许多不同类型的数据结构,如结构,向量,矩阵......基本上任何东西.我要做的是将一些名称映射到他们的数据结构.
我正在使用哈希表执行映射:
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下面的答案中讨论的删除问题,我读到shared_ptr执行类型擦除并存储类型信息以知道要调用的析构函数.
但我不确定这一点.
这不是一个好的做法。如果您没有在您的旁边存储其他类型信息std::shared_ptr(您可以使用 进行转换static_pointer_cast),那么您周围的行为都是未定义的。也许Boost.Any适合您?
如果您想坚持使用,std::shared_ptr<void>请记住提供自定义删除器函数(请参阅make shared_ptr not use delete)。
| 归档时间: |
|
| 查看次数: |
6390 次 |
| 最近记录: |