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

时间:2011-07-22 22:13:53

标签: c++ boost stl shared-ptr raii

因此,为了处理图像或类似的大块内存,显然有很多选择。

由于我是智能指针和RAII的粉丝,我想知道它是否更聪明:

  • a shared_ptrstd::vector

  • 使用shared_array指向动态分配的数组。

选择一个与另一个相比,有什么概念,实践和性能影响?

2 个答案:

答案 0 :(得分:3)

与比较std :: vector与C数组相同。

shared_array视为RAII C数组。你得到的只是自动内存释放。在处理返回数组的第三方代码时很有用。 从理论上讲,它在某些边缘情况下比std :: vector更快,但灵活性更低,安全性更低。

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

答案 1 :(得分:2)

shared_ptrstd::vector

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

shared_array

  • +没有引入额外的间接级别
  • -不允许使用摊销的常量时间追加,除非您自己实施,这又需要额外的间接等级。