使用std::shared_ptr<std::vector>代替boost::shared_array有意义吗?

6

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

boost::shared_array<uint8_t> array;

将其替换为是否有意义:

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

我试图在我的代码中取代所有已经在C++11中出现的boost功能。
我需要澄清一点。实际上,我需要一个原始数组(但是带有引用计数,因此它可以被自动删除),不需要所有这些向量功能。所以boost::shared_array解决了我的问题,而没有任何额外的代价。但我正在尽可能使用新标准的代码(尽管许多来自boost的库仍未涵盖新标准)。
谢谢。

好的,你可以在这种情况下摆脱boost依赖。对于其余部分,在高层次上它是功能等效的。 - Germán Diago
1个回答

4

考虑到当前编译器对C++11的支持以及维护构建的人的懒惰程度,我建议现在将其保留不变。 Boost具有几乎可以在任何地方工作的良好属性,包括旧编译器,并且您想要进行的更改几乎不会改善代码。

此代码也并非完全相同。


4
C++11有shared_ptr<T[]>unique_ptr<T[]>的特化版本,我猜它们完全满足了那个目的。 - rubenvb
3
C++11没有shared_ptr<T[]>的特化版本,您需要提供自己的自定义删除器来使shared_ptr与数组一起使用。 - Andy Prowl
2
@AndyProwl 等等,什么?我完全不记得是这样的。如果是真的,Valgrind 就会告诉我不同的结果。 - sehe
1
Andy就在这里,你必须为shared_ptr提供适当的删除器才能使其正常工作。如果@sehe对你有效,那可能只是你的标准库表现良好,但标准并没有这个功能。 - Bartek Banachewicz
1
@sehe:确实,std::unique_ptr<>的特化在标准中已经定义了。顺便说一下,这里是关于将shared_ptr<T[]>引入的提案。 - Andy Prowl
显示剩余9条评论

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