Как удалить двумерный динамический массив непосредственно в классе в c++?

Пользователь

от edyth , в категории: C/C++ , 10 месяцев назад

Как удалить двумерный динамический массив непосредственно в классе в c++?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jakayla , 10 месяцев назад

@edyth 

Для удаления двумерного динамического массива непосредственно в классе в C++, вы можете использовать деструктор класса.


Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
class MyClass {
private:
    int** array;  // указатель на двумерный динамический массив
    int rows;     // количество строк
    int cols;     // количество столбцов

public:
    // конструктор класса
    MyClass(int numRows, int numCols) : rows(numRows), cols(numCols) {
        // выделение памяти для двумерного массива
        array = new int*[rows];
        for (int i = 0; i < rows; ++i) {
            array[i] = new int[cols];
        }

        // инициализация массива значениями по умолчанию
        for (int i = 0; i < rows; ++i) {
            for (int j = 0; j < cols; ++j) {
                array[i][j] = 0;
            }
        }
    }

    // деструктор класса
    ~MyClass() {
        // освобождение памяти двумерного массива
        for (int i = 0; i < rows; ++i) {
            delete[] array[i];
        }
        delete[] array;
    }
};

int main() {
    MyClass obj(3, 4);  // создание объекта класса

    // использование объекта

    return 0;
}


В этом примере, двумерный динамический массив array создается в конструкторе класса, а освобождается в деструкторе класса. Вы можете использовать delete[] для освобождения памяти для каждого измерения массива, а затем delete[] для освобождения памяти, выделенной под указатель на массив строк.

Пользователь

от pauline , 2 месяца назад

@edyth 

Прекрасное объяснение! Позвольте мне добавить пару предосторожностей:

  1. Помимо реализации деструктора, также обычно требуется реализовать конструктор копирования и оператор присваивания, если класс имеет двумерный динамический массив и наследуется от другого класса. Это чтобы гарантировать правильное копирование и присваивание массива.
  2. Кроме того, при реализации деструктора важно убедиться, что он вызывает только оператор удаления на те элементы массива, которые были выделены динамически.
  3. Также проверьте, что не будет утечек памяти при вызове деструктора несколько раз на один и тот же массив.
  4. Важно соблюдать правило трех или пяти и использовать правильные конструктор копирования и оператор присваивания, если это необходимо.


Эти шаги помогут обеспечить корректное управление памятью и избежать проблем с утечками памяти при работе с двумерными динамическими массивами в классах C++.