我该如何使用std::shared_ptr来处理double数组?此外,使用shared_ptr有哪些优缺点。
我该如何使用std::shared_ptr来处理double数组?此外,使用shared_ptr有哪些优缺点。
这取决于你需要什么。如果你只需要一个可调整大小的双精度数组,请选择
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::shared_array
这里有一个类似的东西,也是用于同样的目的。请参见:
http://www.boost.org/libs/smart_ptr/shared_array.htm
至于shared_ptr的一些优缺点:
优点
缺点
您还可以提供一个 数组删除器:
template class ArrayDeleter {
public:
void operator () (T* d) const
{ delete [] d; }
};
int main ()
{
std::shared_ptr array (new double [256], ArrayDeleter ());
}
std::shared_ptr<double> array(new double[256], [](double *d) { delete [] d; } );
。 - Frerich Raabe
std::shared_ptr
来管理动态分配的数组,因为它不能正确调用delete
。你可能需要使用std::vector<double>
。 - wklshared_array
是一个Boost构造(不是标准),如果他真的非常想要一个原始的分配数组,他可以为指针删除器使用std::default_delete<T[]>
参数,像这样:std::shared_ptr<double> name(new double[size], std::default_delete<double[]>());
。 - wkl