【问题标题】:Does boost have smart pointers for a vector of arrays?boost 是否具有数组向量的智能指针?
【发布时间】:2017-04-03 17:02:00
【问题描述】:

这是保存一个类似的数据

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

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

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

【问题讨论】:

    标签: c++ memory-management boost


    【解决方案1】:

    最好的方法是使用标准库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 的意图,即避免使用指针并自动分配和释放内存。

    【讨论】:

      猜你喜欢
      • 2016-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      相关资源
      最近更新 更多