使用boost_any时是否可以避免开销?

时间:2013-05-22 14:21:53

标签: c++ boost casting boost-any

我想使用boost::any作为通用类型存储在容器中并传递给不同的函数。但是在这些函数中我总是知道真实的类型,所以在运行时我不需要任何类型安全检查和强加的开销,static_cast就足够了。

理想的解决方案是使用类似boost::polymorphic_downcast的内容,但正如我所见,在这种情况下无法应用。

我应该为void*编写自己的包装器还是有其他选择?

1 个答案:

答案 0 :(得分:1)

您可以使用shared_ptr<void>或unique_ptr与static_cast替换boost::anyshared_ptr<void>有一些优于原始void*指针的优势,如:

  • 自动删除其存储空间
  • 可以在代码中引用多个对象(可能你不需要这个)

但当然在这种情况下,每个指针需要更多内存(用于引用计数和删除)。

如果分享对您不利并且您的对象仅在容器中拥有,您也可以使用unique_ptr<void>