gpt4 book ai didi

c++ - 使用 BOOST shared_array 而不是 shared_ptr 的好处

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:28:39 27 4
gpt4 key购买 nike

我想在我的应用程序中使用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 中使用数组类型不是一个好主意,因为 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

stdboostshared_ptr的语法不同,不兼容。

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

关于c++ - 使用 BOOST shared_array 而不是 shared_ptr 的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25968849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com