Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Прикладное программирование.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
439.97 Кб
Скачать

4.3.2. Деструктор (пример 4.4. Конструктор и деструктор класса Матрица)

Деструктор осуществляет освобождение памяти, например уничтожение объектов размещенных динамически.

В классе Lens никакого динамического размещения не происходило, поэтому деструктор будет пустой, но его наличие все равно обязательно. Для примера реализации деструктора, представим, что имеется класс Matrix, который в конструкторе динамически создает двумерный массив размерности n? m. Тогда деструктор должен освобождать память, которую выделяет конструктор.

Конструктор вызывается в момент создания переменной, деструктор вызывается когда время жизни переменной закончилось, то есть когда встречается закрывающая фигурная скобка } блока, в которой была объявлен экземпляр класса, либо когда вызывается оператор delete при динамическом размещении экземпляра класса.

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 4.4. Класс Матрица

// matrix.h

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

// проверка на повторное подключение файла

#if !defined MATRIX_H

#define MATRIX_H

/////////////////////////////////////////////////////////////////////////////

// класс Матрица

class Matrix

{

private:

//число строк и число столбцов

int m_rows, m_cols;

//указатель на динамический массив данных

double* m_data;

public:

//конструктор по умолчанию

Matrix();

//полный конструктор

Matrix(int rows, int cols);

//деструктор

~Matrix();

// ...

};

/////////////////////////////////////////////////////////////////////////////

#endif //defined MATRIX_H

 

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 4.4. Класс Матрица

// matrix.cpp

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

#include <iostream>

using namespace std;

// подключение описания класса

#include "matrix.h"

/////////////////////////////////////////////////////////////////////////////

// конструктор по умолчанию

Matrix::Matrix()

: m_rows(0)

, m_cols(0)

, m_data(NULL)

{

}

/////////////////////////////////////////////////////////////////////////////

// полный конструктор

Matrix::Matrix(int rows, int cols)

: m_rows(rows)

, m_cols(cols)

{

m_data=new double [rows*cols];

for(int i=0; i<m_rows*m_cols; i++)

{

m_data[i] = 0.;

}

}

/////////////////////////////////////////////////////////////////////////////

//деструктор

Matrix::~Matrix()

{

if(m_data != NULL)

{

delete [] m_data;

}

}

/////////////////////////////////////////////////////////////////////////////

 

/////////////////////////////////////////////////////////////////////////////

// Прикладное программирование

// Пример 4.4. Класс Матрица

// test_matrix.cpp

//

// Кафедра Прикладной и компьютерной оптики, http://aco.ifmo.ru

// СПб НИУ ИТМО

/////////////////////////////////////////////////////////////////////////////

// подключение описания класса

#include "matrix.h"

/////////////////////////////////////////////////////////////////////////////

void main()

{

// в момент создания матрицы вызывается конструктор по умолчанию

Matrix a;

// в момент создания матрицы 3х3 вызывается полный конструктор

Matrix b(3,3);

// ...

}// время жизни переменных a и b заканчивается, вызывается деструктор

/////////////////////////////////////////////////////////////////////////////