Примечание 1:
Каждое новое выражение в вашем коде является возможной утечкой памяти, потому что ваш код ужасно исключителен: если любое из ваших выражений new
выдает исключение для всех вашихутечка уже выделенного хранилища.
Примечание 2:
Ваш первый конструктор не семантически соответствует вашему деструктору (даже если мы предположим, что все идет нормально, не выбрасывая): конструктор присваивает нулевое значение this->nrOf
, но выделяет 10 элементов массива this->matrix
и назначает выделенный массив каждому элементу, но деструктор ожидает this->nrOf
элементов this->matrix
(массивов) для удаления, поэтому 0 элементов удаляется и, таким образом, 10 элементов
Примечание: Ваш this->x
(существует согласно второму конструктору) не инициализируется первым конструктором.
Примечание 3:
Ваш второй конструктор просто поврежден: вы никогда не инициализируете переменную this->nrOf
, а используете ее так, как будто она содержит что-то допустимое.
ADD:
Хороший совет здесь будет: никогда не используйте массивы и выражения new
/ new[]
/ delete
/ delete[]
.Вместо этого используйте std::vector
в вашей ситуации.Таким образом, вы можете не беспокоиться об утечках памяти, безопасности исключений и т. Д.
Ваш matrix
будет выглядеть так:
std::vector< std::vector<int> > matrix;
....................
....................
n = 10;
m = 20;
matrix.resize(n);
for( size_t j = 0; j < n; ++j )
{
matrix[j].resize(m);
for( size_t k = 0; k < m; ++k )
{
matrix[j][k] = j+k;
}
}