如何在 C++ 中为二维对象数组分配内存?

How to allocate memory to a 2D array of objects in c++?

三个 类 Zoo、ZooObject 和 Animal present.Is 像下面提到的那样声明 ZooObject 的二维数组有效吗?如果是这样,我该如何初始化它?我很熟悉动态分配一个二维数组,但搞不懂这个。

class ZooObject;

class Zoo {
 public:
  int rows, cols;
  ZooObject ***zooArray;

  Zoo(int rows, int cols) {
    this->rows = rows;
    this->cols = cols;
    // dynamically initialize ***zooArray as a 2D array with each 
    //element of type Animal
    // initially initialized to NULL.


 // initialize each row first.
    for (i = 0; i < rows; i++) {
      zooArray[i] = new ZooObject *[cols];
    }

    // initialize each column.
    for (i = 0; i < rows; i++) {
      for (j = 0; j < cols; j++) {
        Animal animal;
        zooArray[i][j] = &animal;
      }
    }
  }
};

class ZooObject {
 public:
  bool isAlive;
};

class Animal : public ZooObject {
 public:
  bool isHerbivore;
};

int main() { Zoo *zoo = new Zoo(3, 3); }

如前所述,这里很好 post 对问题的一般答案进行了详细解释。 How do I declare a 2d array in C++ using new?

在你的情况下,如果你想将其存储为二维数组。您应该首先分配所有行,其中每一行都是一个 ZooObject**,这是 ZooObject 的指针数组。 然后,对于每一行,您应该分配 ZooObject* 的数组(列)。你会得到这样的东西:

    Zoo(int rows, int cols) {
        this->rows = rows;
        this->cols = cols;

        zooArray = new ZooObject**[rows];
        for (int i = 0; i < rows; ++i) {
            zooArray[i] = new ZooObject*[cols];
            for (int j = 0; j < cols; ++j) {
                zooArray[i][j] = nullptr;
            }
        }
    }

但是,考虑使用一维数组,您仍然可以通过二维访问它,通过相应的方法,将 rowId, colId 对转换为一维。

另外,别忘了 deletenew!