我想在我的应用程序中使用 BOOST智能指针进行内存管理。但是我不确定应该将哪个智能指针用于动态分配的数组shared_ptr
或shared_array
。
根据BOOST
doc 从Boost版本1.53开始,shared_ptr可用于保存指向动态分配数组的指针。
所以我现在想知道用户应该使用 shared_array 而不是 shared_ptr 的目的。
答案 0 :(得分:6)
在boost 1.53之前,shared_ptr
将用于指向单个对象的指针。
1.53之后,由于shared_ptr
可以用于数组类型,我认为它与shared_array
几乎相同。
但是现在我认为在shared_ptr
中使用数组类型是个好主意,因为C ++ 11的std::shared_ptr
行为有点不同数组类型与boost::shared_ptr
相比。
请参阅shared_ptr to an array : should it be used?作为差异的参考。
因此,如果您希望代码与C ++ 11兼容并使用std::shared_ptr
代替,则需要仔细使用它。这是因为:
代码看起来像下面的编译错误(你需要一个自定义删除器),而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
shared_ptr
和std
中boost
的语法不同且不兼容。
附加信息:考虑boost::ptr_vector,这是向量中动态分配对象的一种非常快速的实现。仅供参考,以防您需要此功能。