|
Программирование >> Расширенная версия языка c++
Примеры.;; 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, она освобождается только один раз.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0.001
При копировании материалов приветствуются ссылки. |