删除会导致数组被推入向量中也会丢失内存吗?

zeb*_*und 1 c++ memory-management

我有以下函数,它只是一个构造函数.它的作用是为二维浮动指针数组分配内存.我很想知道是否,当我将这个数组添加到一个vector实例时,如果我删除了数组的原始初始化,它是否也会删除该向量中的数组?

这是代码:

Evaluator::Evaluator(int row, Column col) {
  this->verticies = new std::vector();

  float* matrix = NULL;

  switch(col) {
  case ONE:
      matrix = new float[row][1];
      break;
  case TWO:
      matrix = new float[row][2];
      break;
  case THREE:
      matrix = new float[row][3];
      break;
  case FOUR:
      matrix = new float[row][4];
      break;
  }

  this->verticies->push_back(matrix);

  delete matrix;
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*rtz 5

代码刚好坏了.您无法分配new[]和取消分配delete.允许实现在不同的分配器中使用完全不同的逻辑.

你想要的是什么delete[] matrix;.

至于你问的问题,这取决于你在矢量中存储的内容.如果将指针存储在向量中然后delete[]在同一指针上调用,则向量将保持无效指针.哎哟.如果向量本身保存了对象,那么您构造了一个与您删除的对象具有相同值的新对象,因此向量仍然可以.

你的代码不可编译,也不清楚向量的完整类型是什么,所以很难说.此外,出于这个原因,您应该使用智能(或引用计数)指针.