std :: shared_ptr的用法

时间:2012-03-26 16:50:02

标签: c++ shared-ptr

如何将std :: shared_ptr用于double数组?另外,使用shared_ptr有什么优点/缺点。

2 个答案:

答案 0 :(得分:9)

这取决于你所追求的。如果您只想要一个可调整大小的双精度数组,请使用

std::vector<double>

示例:

std::vector<double> v;
v.push_back(23.0);
std::cout << v[0];

如果共享所述阵列的所有权对您很重要,请使用例如

std::shared_ptr<std::vector<double>>

示例:

std::shared_ptr<std::vector<double>> v1(new std::vector<double>);
v1->push_back(23.0);
std::shared_ptr<std::vector<double>> v2 = v1;
v2->push_back(9.0);
std::cout << (*v1)[1];

或者,Boost有

boost::shared_array

用于类似的目的。见这里:

http://www.boost.org/libs/smart_ptr/shared_array.htm

就shared_ptr的一些优点/缺点而言:

赞成

  • 基于引用计数的自动共享资源释放 - 有助于避免内存泄漏以及与未应用时无法解除分配相关的其他问题
  • 可以更容易编写异常安全的代码

缺点

  • 存储引用计数的内存开销对于小对象来说可能很重要
  • 性能可能比原始指针更差(但要衡量这一点)

答案 1 :(得分:6)

您还可以提供array deleter:

template class ArrayDeleter {
public:
    void operator () (T* d) const
    { delete [] d; }
};

int main ()
{
    std::shared_ptr array (new double [256], ArrayDeleter ());
}