Не понимаю почему происходит ошибка, когда компилятор доходит до деструктора.
Class object
{
int h, l;
char** view = new char* [h];
public:
object(int h, int l)
{
this->h = h;
this->l = l;
for (int i = 0; i < h; i++)
view[i] = new char[l];
}
~object()
{
for (int i = 0; i < h; i++)
delete[] view[i];
delete[] view;
}
};
int main()
{
object cube(2,2);
return 0;
}
Другие языки программирования и технологии
ООП в c++. Совсем недавно познакомился с деструкторами класса и решил опробовать их на двумерном динамическом массиве.
Чему по твоему равен h в строке - "char** view = new char* [h]" ?
Багитжан Ажбентаев
Понял. Спасибо, всё заработало.
#include <iostream>
#include <iomanip>
using namespace std;
template<typename Type>
class Matrix {
public:
Matrix(size_t rows, size_t cols) : rows_(rows), cols_(cols), matrix_(nullptr) {
matrix_ = new (nothrow) Type* [rows_];
if (matrix_) {
for (auto i = 0U; i < rows_; ++i) {
matrix_[i] = new (nothrow) Type [cols_];
if (!matrix_[i]) {
for (auto j = 0U; j < i; ++j) delete[] matrix_[j];
delete[] matrix_;
matrix_ = nullptr;
break;
}
}
}
}
~Matrix() {
if (matrix_ != nullptr) {
for (auto i = 0U; i < rows_; ++i) delete[] matrix_[i];
delete[] matrix_;
matrix_ = nullptr;
}
}
void insert(Type value, size_t row_index, size_t col_index) {
if (matrix_ != nullptr && row_index < rows_ && col_index < cols_) {
matrix_[row_index][col_index] = value;
}
}
void fill_value(Type value) {
for (auto i = 0U; i < rows_; ++i) {
for (auto j = 0U; j < cols_; ++j) {
insert(value, i, j);
}
}
}
void show(streamsize tab) {
for (auto i = 0U; i < rows_; ++i) {
for (auto j = 0U; j < cols_; ++j) cout << setw(tab) << matrix_[i][j];
cout.put('\n');
}
}
private:
size_t rows_;
size_t cols_;
Type** matrix_;
};
int main() {
Matrix<int> matrix(4, 6);
matrix.fill_value(13);
matrix.show(5);
cin.get();
}
#include <iomanip>
using namespace std;
template<typename Type>
class Matrix {
public:
Matrix(size_t rows, size_t cols) : rows_(rows), cols_(cols), matrix_(nullptr) {
matrix_ = new (nothrow) Type* [rows_];
if (matrix_) {
for (auto i = 0U; i < rows_; ++i) {
matrix_[i] = new (nothrow) Type [cols_];
if (!matrix_[i]) {
for (auto j = 0U; j < i; ++j) delete[] matrix_[j];
delete[] matrix_;
matrix_ = nullptr;
break;
}
}
}
}
~Matrix() {
if (matrix_ != nullptr) {
for (auto i = 0U; i < rows_; ++i) delete[] matrix_[i];
delete[] matrix_;
matrix_ = nullptr;
}
}
void insert(Type value, size_t row_index, size_t col_index) {
if (matrix_ != nullptr && row_index < rows_ && col_index < cols_) {
matrix_[row_index][col_index] = value;
}
}
void fill_value(Type value) {
for (auto i = 0U; i < rows_; ++i) {
for (auto j = 0U; j < cols_; ++j) {
insert(value, i, j);
}
}
}
void show(streamsize tab) {
for (auto i = 0U; i < rows_; ++i) {
for (auto j = 0U; j < cols_; ++j) cout << setw(tab) << matrix_[i][j];
cout.put('\n');
}
}
private:
size_t rows_;
size_t cols_;
Type** matrix_;
};
int main() {
Matrix<int> matrix(4, 6);
matrix.fill_value(13);
matrix.show(5);
cin.get();
}
Похожие вопросы
- Сортировка двумерного динамического массива
- двумерный динамический массив в паскале
- Дан двумерный динамический массив, надо составить программу, которая меняет местами две любые строки
- Как задать двумерный динамический массив в Паскале?
- как вернуть двумерный динамический массив из функции С++
- динамический массив в Visual C++
- Зачем в ООП введены деструкторы класса?
- вопрос о динамических массивах в fortran
- пожалуйста, напишите мне программу этого вопроса в C ++.пожалуйста помогите. Создать динамический массив из N чисел.
- Как описать и использовать динамический массив в C++