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

9. Работа с динамической памятью. Назначение динамического выделения памяти. Операторы new и delete. Время жизни динамических объектов.

Динамическая память это как раз таки и есть new и delete. С помощью оператора New выделяем память.

3) Операторы new и delete.

Оператор delete возвращает память, выделенную оператором new (разбивает память). Вызов delete должен происходить для каждого вызова new, чтобы избежать утечки памяти. После вызова delete объект, указывающий на этот участок памяти, становится некорректным и не должен больше использоваться.

Фрагмент кода в качестве примера:

int *p_var = NULL; // объявление нового указателя

p_var = new int; // память динамически выделяется

/* .......

остальной код

........*/

delete p_var; // память освобождается

p_var = NULL; // указатель заменяется на 0 (нуль-указатель)

Массивы, созданные (выделенные) при помощи new [], аналогичным образом могут быть уничтожены (оcвобождены) при помощи delete []:

int size = 10;

int *p_var = NULL; // объявление нового указателя

p_var = new int [size];// память динамически выделяется

/* .......

остальной код

........*/

delete [] p_var; // память освобождается

p_var = NULL; // указатель заменяется на 0 (нуль-указатель)

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

Время жизни динамических объектов.

Они живут до тех пор пока программа работает, либо до оператора delete.

int _tmain(int argc, _TCHAR* argv[])

{setlocale( LC_ALL,"rus");

int n;

cout<<"Введите размерность:"<<"\n";

cin>>n;

int *a = new int [n,n];

int i,j,num,max;

srand(time(0));

num=0;

max=0;

for (i=0;i<n;i++){

for(j=0;j<n;j++){

num++;

a[i,j]=num*rand()%100;

if (max < a[i,j]) max=a[i,j];

cout<<a[i,j]<<" ";

}

cout<<endl;

}

cout<<"Максимальный элемент = "<<max<<" ";

}

10. Inline – функции, шаблоны и перегрузка имен. Роль inline – функций и шаблонов. Объявление inline – функций и шаблонов. Ограничения связанные с inline – функциями.

Inline-функции

inline функция даёт компилятору сделать функцию встраиваемой

inline double sqr(double a){

return a*a;

}

Перегрузка имен.

Int min(int a, int b) {…}

Double min(double a, double b) {…}

ДОЛЖНА БЫТЬ РАЗНАЯ СИГГНАТУРА. Тогда это будет перегрузка. если разные типы параметров происходит перегрузка.

Шаблоны

шаблоны необходимы для того чтобы не переписывать функцию или класс, позволяют создать параметризованную функцию или класс. Хотя шаблоны предоставляют краткую форму записи участка кода, на самом деле их использование не сокращает исполнимый код, так как для каждого набора параметров компилятор создаёт отдельный экземпляр функции или класса.

Роль inline – функций и шаблонов. Увеличить производительность программ.

Объявление inline – функций и шаблонов.

Шаблон

template <typename T> T Abs (T N)

{

return N < 0 ? -N : N;

}

template <typename T> T Max (T A, T B)

{

return A > B ? A : B;

}

Ограничения связанные с inline – функциями.