我想在应用程序中使用BOOST智能指针进行内存管理。但我不确定应该为动态分配的数组shared_ptr
或shared_array
使用哪个智能指针。
根据BOOST
文档从Boost 1.53版本开始,shared_ptr可以用于保存指向动态分配数组的指针
所以我现在只是想知道用户应该使用shared_array而不是shared_ptr来达到什么目的。
在boost 1.53之前,boost::shared_ptr
将用于指向单个对象的指针。
1.53之后,由于boost::shared_ptr
可以用于数组类型,我认为它与boost::shared_array
基本相同。
但就目前而言,我认为在shared_ptr
中使用数组类型不是一个好主意,因为与boost::shared_ptr
相比,C++11的std::shared_ptr
在数组类型上有点不同。
请参阅数组的shared_ptr:是否应该使用它?作为差异的参考。
因此,如果您希望您的代码与C++11兼容,并使用std::shared_ptr
,则需要小心使用它。因为:
-
下面的代码出现编译错误(您需要一个自定义的deleter),而boost的版本还可以
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
-
然而,如果你写下面这样的代码,你很可能会得到段故障
std::shared_ptr<T> a(new T[5]); // segment fault boost::shared_ptr<T> b(new T[5]); // segment fault
std
和boost
中shared_ptr
的语法不同且不兼容。
附加信息:考虑boost::ptr_vector,它是vector中动态分配对象的一个非常快速的实现。仅供参考,以防您想要此功能。