boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]

Posted

技术标签:

【中文标题】boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]【英文标题】:boost::ptr_vector vs. std::vector<std::unique_ptr<T>>? [closed] 【发布时间】:2013-02-07 21:03:55 【问题描述】:

他们做类似的事情。

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

在哪种情况下是首选?

【问题讨论】:

我认为您需要提出比“更好”更客观的要求。 取决于“更好”的含义。后者不需要外部依赖,但前者可能更易于使用(取决于您对“更简单”的定义:])。 链接:***.com/questions/9469968/… 可能重复***.com/q/1374840/318716 【参考方案1】:

我更喜欢std::vector&lt;std::unique_ptr&lt;T&gt;&gt; 有几个原因:

    类型安全——虽然这在boost::ptr_vector 中对您来说已经很好地抽象了,但ptr_vector 仍然以std::vector&lt;void*&gt; 的形式实现。 对自定义删除器的明确支持 -- 我认为您可以使用 boost::ptr_vector 获得自定义删除器行为,但使用 std::unique_ptr 时支持更清晰(和明确)。 它是标准的,并且受到兼容的 C++11 编译器的良好支持。

【讨论】:

我还要补充一点,vector&lt;unique_ptr&gt;标准。人们知道它是什么。大多数人可能不知道boost::ptr_vector

以上是关于boost::ptr_vector 与 std::vector<std::unique_ptr<T>>? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

boost::ptr_vector 和 boost::any 的问题

如何从 boost::ptr_vector 中删除“this”

boost::ptr_vector 如何深拷贝底层对象?

std::vector 与 std::list 与 std::slist 的相对性能?

std::bind 与 std::function 与 Clang 崩溃

std::dynarray 与 std::vector