将delete也会导致被压入vector的数组丢失内存

Will delete cause the array pushed into a vector to lose memory as well?

本文关键字:vector 数组 内存 delete      更新时间:2023-10-16

我有以下函数,它只是一个构造函数。它所做的是为一个二维浮点指针数组分配内存。我很想知道是否,当我将这个数组添加到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;
}

代码坏了。你不能用new[]分配,用delete释放。该实现允许在不同的分配器中使用完全不同的逻辑。

你想要的是delete[] matrix;

至于你问的问题,这取决于你在vector中存储了什么。如果在vector中存储了一个指针,然后在该指针上调用delete[],则vector中保存了一个无效指针。哎哟。如果vector包含对象本身,则构造一个具有与删除对象相同值的新对象,因此vector仍然可以。

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

删除matrix后,压入vector的指针副本无效。任何使用这些指针的尝试都将导致未定义的行为,可能导致程序崩溃。