【问题标题】:Does it make sense to use std::shared_ptr<std::vector> instead of boost::shared_array?使用 std::shared_ptr<std::vector> 而不是 boost::shared_array 有意义吗?
【发布时间】:2013-05-13 11:14:16
【问题描述】:

现在我正在重写部分代码以使用 C++11 标准。在某些地方我发现了以下代码:

boost::shared_array<uint8_t> array;

是否可以将其替换为:

std::shared_ptr<std::vector<uint8_t>> array;

我正在尝试在我的代码中替换 C++11 中已经提供的所有 boost 功能。

我需要澄清一下。实际上我需要一个原始数组(但带有引用计数,因此可以自动删除),不需要所有这些矢量特征。所以 boost::shared_array 解决了我想要的问题,无需任何额外费用。但是我试图让我的代码尽可能地使用新标准(尽管来自 boost 的许多库仍然没有被新标准涵盖)。

谢谢。

【问题讨论】:

  • 好吧,在这种情况下,您可以摆脱对 boost 的依赖。对于其余部分,它在高级别的功能上是等效的。

标签: c++ boost c++11 stl


【解决方案1】:

考虑到编译器中 C++11 支持的现状以及维护构建的人们的懒惰,我将保持原样。 Boost 具有几乎可以在任何地方工作的好特性,包括旧的编译器,您想要进行的更改几乎不会改进代码。

这段代码也不完全相同。

【讨论】:

  • @maverik:C++11 有 shared_ptr&lt;T[]&gt;unique_ptr&lt;T[]&gt; 专业化,我想这完全可以满足这个目的。
  • @rubenvb:C++11 没有 shared_ptr&lt;T[]&gt; 特化,您必须提供自己的自定义删除器才能使 shared_ptr 与数组一起使用。
  • @AndyProwl 等等,什么?这绝对不是我记忆中的样子。如果是真的,Valgrind 会以不同的方式告诉我
  • Andy 就在这里,您必须向shared_ptr 提供适当的删除器才能使其正常工作。如果它对你有用@sehe,那可能只是你的标准库玩得很好,但标准没有它。
  • @sehe:确实,标准中定义了std::unique_ptr&lt;&gt; 的特化。顺便说一句,here 也是shared_ptr&lt;T[]&gt; 的提议
猜你喜欢
  • 1970-01-01
  • 2016-03-15
  • 2015-04-04
  • 1970-01-01
  • 2019-10-20
  • 2017-08-22
  • 1970-01-01
  • 2013-07-11
  • 1970-01-01
相关资源
最近更新 更多