boost::ptr_vector与std::vector<std::unique_ptr<T>>的比较?

4

它们做了类似的事情。

选择这两者之间应该考虑什么?

在哪些情况下会更倾向于选择其中的一个?


3
请问您需要的比“更好”更客观的东西。 - Fred Larson
取决于你对“更好”的理解。后者不需要外部依赖,但前者可能更容易使用(这取决于你对“更简单”的定义:])。 - GManNickG
链接:https://dev59.com/wWox5IYBdhLWcg3wDgEz - Martin Ba
可能是重复问题 https://dev59.com/Q0nSa4cB1Zd3GeqPLzI7 - Joseph Quinsey
1个回答

6
我会选择 std::vector<std::unique_ptr<T>>, 原因如下:
  1. 类型安全性 -- 虽然这在 boost::ptr_vector 中已经很好地进行了抽象,但是 ptr_vector 仍然是基于 std::vector<void*> 实现的。
  2. 清晰的自定义删除器支持 -- 使用 boost::ptr_vector 可以获得自定义删除器行为,但是当使用 std::unique_ptr 时,支持更加明确(而且显式)。
  3. 它是标准的,并且受到符合 C++11 标准的编译器的良好支持。

1
我还要补充一点,vector<unique_ptr> 是标准的。人们知道它是什么。大多数人可能不知道 boost::ptr_vector - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接