在shared_ptr上使用BOOST shared_array的好处

Benefits of using BOOST shared_array over shared_ptr

本文关键字:shared array BOOST ptr      更新时间:2023-10-16

我想在应用程序中使用BOOST智能指针进行内存管理。但我不确定应该为动态分配的数组shared_ptrshared_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
    

stdboostshared_ptr的语法不同且不兼容。

附加信息:考虑boost::ptr_vector,它是vector中动态分配对象的一个非常快速的实现。仅供参考,以防您想要此功能。