开发者

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

So to deal with large blobs of memory either for an image or similar there are clea开发者_Python百科rly lots of options.

Since I'm a fan of smart pointers and RAII I'm wondering about whether it's smarter to go with :

  • a shared_ptr to a std::vector

or

  • to go with a shared_array pointing to a dynamically allocated array.

What are the conceptual, practical, and performance implications of choosing one vs the other?


It's the same as comparing std::vector vs. C array.

Think about shared_array as a RAII C array. What you get is just automatic memory deallocation. Useful in cases when you deal with 3rd-party code that returns arrays. Theoretically it's faster than std::vector in some edge cases, but much less flexible and less secure.

std::vector is probably the better choice.


shared_ptr to std::vector

  • + allows amortized constant time push_back
  • - introduces an extra level of indirection over std::vector

shared_array

  • + does not introduce an extra level of indirection
  • - does not allow amortized constant time append, unless you implement it yourself, which again would take an extra level of indirection.
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜