在shared_ptr上使用BOOST shared_array的好处

Hem*_*war 5 c++ boost smart-pointers

我想在我的应用程序中使用BOOST Smart指针进行内存管理.但是我不确定我应该将哪个智能指针用于动态分配的数组shared_ptrshared_array.

根据BOOST文档Starting with Boost release 1.53,shared_ptr可用于保存指向动态分配的数组的指针.

所以我现在想知道用户应该使用shared_array而不是shared_ptr的目的是什么.

Min*_*ine 8

在boost 1.53之前,shared_ptr将用于指向单个对象的指针.

在1.53之后,因为shared_ptr可以用于数组类型,我认为它几乎相同shared_array.

但是现在我认为使用数组类型并不是一个好主意shared_ptr,因为C++ 11 std::shared_ptr在数组类型上的行为有点不同boost::shared_ptr.

请参阅shared_ptr到数组:是否应该使用它?作为区别的参考.

因此,如果您希望代码与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
    
    Run Code Online (Sandbox Code Playgroud)
  • 但是,如果您编写如下代码,则可能会出现段错误

    std::shared_ptr<T> a(new T[5]); // segment fault
    boost::shared_ptr<T> b(new T[5]); // segment fault
    
    Run Code Online (Sandbox Code Playgroud)

shared_ptrin std和的语法boost不同且不兼容.

附加信息:考虑boost :: ptr_vector,这是一个非常快速的向量动态分配对象的实现.仅供参考,以防您需要此功能.