Программирование >>  Расширенная версия языка c++ 

1 ... 35 36 37 [ 38 ] 39 40 41 ... 227


Примеры.;;

1. Для начала рассмотрим программу выделения памяти для хранения целого: Простой пример торов new и delete

ttinclude <io3tream> -

usin space std; .. .

int mainO , - .. :

. , int *p; - .

p = new int; выделение памяти для целого if ( !p)

cout Ошибка выделения памяти \n ; - -

return 1;

{ : -

*р = 1000;

cou << Эт ое, на которое указывает << *р \п ;

г delete p; освобождение памяти return 0;

Обратите внимание, что возвращаемое оператором new значение перед использованием проверяется. Как уж иналось, эта проверка имеет значение только в том случае, если в вашем компиляторе при неудачной попытке выделения памяти оператор new возвращает нулевой указатель.

2. Пример, в котором память объекту выделяется динамически:

Динамическое выделение памяти объектам ttinclude <lostream> using namespace std;

class samp {

inti , j ;

public; f

voi (int a, int b) { i = a; j b; }

совместимый с типом указателя, стоящего слева от знака равенства. Однако для С++ этот случай не подходит. При использовании функции mallocO требуется полное приведение типов. Смысл этого отличия в том, что оно позволяет C++ усилить контроль типа при возвращении функцией значения.

Теперь, после введения операторов new и delete, они будут использоваться в программах вместо функций malIoc() и free().



in roductO { return j; }

int main ()

samp

p = new samp; выделение памяти объекту if(!p) i

cout Опшбка выделения памяти\n ; return 1;

-.out Итог равен: p->getj:)roduct () \n ;

return 0; - .

I YnpaJitkeHUflj

1. Напишите программу, в которой оператор используется для динамического размещения переменных типа float, long и char. Задайте этим динамическим переменным значения и выведите эти значения на экран. В завершение с помощью оператора delete освободите всю динамически выделенную область памяти.

2. Создайте класс для хранения своего имени и номера телефона. Используя оператор new, динамически выделите память для объекта этого класса и введите имя и телефон в соответствующие поля внутри объекта.

3. Какими двумя способами оператор new может известить вас о неудачной попытке выделения памяти?

4.5. Дополнительные сведения об операторах new и delete

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

своено начальное значение. Во-вторых, можно создавать динамически размещаемые массивы объектов.

Вы можете присвоить динамически размещаемому объекту начальное значение, используя следующую форму оператора new:

p-var = new type (нлчальнов аначен11в);



Дл евших компиляторов в операторе delete было необходимо указывать в квадратных скобках размер освобождаемого массива. Так требовало исходное определение С++. В современных компиляторах задавать размер массива не нужно.

I ПримерыJ -2

1. В следующей программе выделяется и инициализируется память для хранения целого:

Пример инициализации динамической переменной : .....

ttinclude <iostream> - - .

using namespace std;

int main () .1 , . . .

int *p;

p = new int (9); задание начального значения раБного 9 i.

if(]pJ {

cout Ошибка выделения памяти\п ; .li .

return 1;

cou Это целое, на которое илвав! р: *р \п ;

Для динамически размещаемого одномерного массива используйте такую форму оператора new:

p-var new type [size];

После выполнения этого оператора указатель p-var будет указывать на начальный элемент массива из size элементов заданного типа. Из-за разных чисто технических причин невозможно инициализировать массив, память для выделена динамически.

Для удаления динамически размешенного одномерного массива вам использовать следующую форму оператора delete:

delete [] p-var;

При таком синтаксисе компилятор вызывает деструктор для каждого мента массива. Это не приводит к многократному освобождению памяти по адресу, обозначенному указателем p-var, она освобождается только один раз.



1 ... 35 36 37 [ 38 ] 39 40 41 ... 227

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки.
Яндекс.Метрика