为什么使用一个与另一个:"boost::shared_array"VS "boost::shared_ptr<std::vector>"?

Why use one vs the other: `boost::shared_array` VS `boost::shared_ptr<std::vector>`?

本文关键字:shared boost lt ptr std gt vector VS array 另一个 为什么      更新时间:2023-10-16

因此,对于图像或类似的大块内存,显然有很多选择。

因为我是智能指针和RAII的粉丝,所以我想知道使用它是否更聪明:

  • a shared_ptr到a std::vector

    与一个shared_array指向一个动态分配的数组。

选择一个与另一个的概念、实践和性能含义是什么?

这与比较std::vector和C数组是一样的。

考虑shared_array作为RAII C数组。你得到的只是自动内存回收。在处理返回数组的第三方代码时非常有用。理论上,在某些边缘情况下,它比std::vector快,但灵活性和安全性要差得多。

std::vector可能是更好的选择。

shared_ptrstd::vector

    +允许平摊常数时间push_back
  • -std::vector
  • 之上引入了额外的间接级别

shared_array

  • +不引入额外的间接级别
  • -不允许平摊常数时间追加,除非你自己实现它,这又需要额外的间接级别。