如何将std :: shared_ptr用于double数组?另外,使用shared_ptr有什么优点/缺点。
答案 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 ());
}