【问题标题】:should I continue to use boost::shared_array or use boost::shared_ptr<type []> instead?我应该继续使用 boost::shared_array 还是使用 boost::shared_ptr<type []> 代替?
【发布时间】:2014-03-21 02:39:56
【问题描述】:

从 Boost 版本 1.53 开始,shared_ptr 可用于保存 指向动态分配数组的指针。 (http://www.boost.org/doc/libs/1_55_0/libs/smart_ptr/shared_ptr.htm)

此外,使用 shared_ptr 具有分配器功能的好处,例如 boost::make_shared(...);
我应该尽可能开始使用 boost::shared_ptr 而不是 boost::shared_array 吗?似乎 boost::shared_ptr 可以完成 boost::shared_array 所做的大部分工作。

【问题讨论】:

  • shared_array 的一个优点是它覆盖了[] 运算符。使用 shared_ptr&lt;T[]&gt; 您需要先取消引用指针:(*sharedPtr)[i] 而不是 sharedArray[i]
  • std::vector 通常是更好的选择。
  • @Nick:没必要,shared_ptr 支持数组类型的operator[],另一方面不支持operator-&gt;operator*。见boost.org/doc/libs/1_55_0/boost/smart_ptr/shared_ptr.hpp
  • 自从我上次使用 Boost 以来,事情已经发生了变化!
  • @MaximYegorushkin:谢谢。也许 shared_ptr<:vector> 可以解决大部分问题。

标签: c++ boost


【解决方案1】:

是的,使用 shared_ptr 的一个重要好处是您不再需要显式释放内存。 shared_ptr 是一个智能指针,因此会自行释放内存,从而避免任何内存泄漏。 SO上也有类似的问题,请访问链接Why use one vs the other: `boost::shared_array` VS `boost::shared_ptr<std::vector>`?

【讨论】:

  • shared_array,作者已经在使用也是智能指针
【解决方案2】:

如果代码正确且有效,我不会更改主题。

如果我有空闲时间并希望进行更改,我会立即迁移到std::shared_ptr&lt;T[]&gt;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 2023-04-03
    相关资源
    最近更新 更多