boost是否有针对数组向量的智能指针?

时间:2017-04-03 17:02:01

标签: c++ memory-management boost

这是为了保存像

这样的数据
double **a;
a = new (double*)[100];
for (int i=0; i<100; ++i) {
   a[i] = new double[99];
}

ptr_vector可以包含指针向量。但它似乎不支持自定义删除器来释放数组。

一个解决方案是我可以创建一个管理99个双打的新类,并使用ptr_vector来保存100个类吗?

1 个答案:

答案 0 :(得分:2)

最好的方法是使用标准库std::vector使您不必担心内存管理并且必须设置矢量的大小。

std::vector<std::vector<double>> a;

您也可以使用std::unique_ptr,但分配动态内存更麻烦。但是,由于std :: unique_ptr是智能指针,当对象析出/耗尽作用域时,内存会自动释放。

std::unique_ptr<std::unique_ptr<double>[]> a(new std::unique_ptr<double>[100]);
  for (i=0; i <100; i++)
      a[i] = std::unique_ptr<int[]>(new int[99]);

以上是有效的,但它违背了std::unique_ptr的意图,即保护您不使用指针并自动分配和释放内存。