I want to use BOOST Smart pointer for memory management in my application. But I'm not sure which smart pointer should I use for dynamically allocated array shared_ptr
or shared_array
.
According to the BOOST
doc Starting with Boost release 1.53, shared_ptr can be used to hold a pointer to a dynamically allocated array.
So I'm just wondering now what purpose user should use shared_array instead of shared_ptr.
Before boost 1.53, boost::shared_ptr
is to be used for a pointer to a single object.
After 1.53, since boost::shared_ptr
can be used for array types, I think it's pretty much the same as boost::shared_array
.
But for now I don't think it's a good idea to use array type in shared_ptr
, because C++11's std::shared_ptr
has a bit different behavior on array type compared to boost::shared_ptr
.
See shared_ptr to an array : should it be used? as reference for the difference.
So if you want your code compatible with C++11 and use std::shared_ptr
instead, you need to use it carefully. Because:
Code look like below gets compile error (you need a custom deleter), while boost's version is OK.
std::shared_ptr<int[]> a(new int[5]); // Compile error
// You need to write like below:
std::shared_ptr<int> b(new int[5], std::default_delete<int[]>());
boost::shared_ptr<int[]> c(new int[5]); // OK
However, if you write code like below, you are likely to get segment fault
std::shared_ptr<T> a(new T[5]); // segment fault
boost::shared_ptr<T> b(new T[5]); // segment fault
The syntax of shared_ptr
in std
and boost
are different and not compatible.
Additional information: consider boost::ptr_vector, which is a pretty fast implementation for dynamic allocated objects in vector. Just FYI in case you want this feature.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With