ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 10) онлайн
Операция new
С++ предлагает другой подход к выделению памяти: операцию new: Это универ- сальная операция, получающая память у операционной системы и возвраща- ющая указатель на начало выделенного блока. В программе NEWINTRO показано, как это работает:
// newintro.cpp
// познакомимся с оператором new
#include <iostream>
#include <cstring>
using namespace std;
int main ( )
{
char* str = "Дурная голова ногам покоя не дает.";
int len = strlen ( str ); // вычислим длину нашей строки
char* ptr; // определим переменную
ptr = new char [ len +1 ]; // выделим память
strcpy ( ptr, str ); // скопируем строку str в ptr
cout << "ptr = " << ptr << endl; // покажем что содержится в ptr
delete [] ptr; // освободим выделенную память
return 0;
}
Выражение
ptr = new char [ len + 1 ];
присваивает переменной ptr значение адреса блока памяти, достаточного для хра- нения строки str, длину которой можно получить, используя библиотечную функ- цию strlen() плюс дополнительный байт для символа конца строки. На рис. 10.13 показан синтаксис операции new. Обратите внимание на использование квадрат- ных скобок. На рис. 10.14 показана память, выделенная с помощью операции new, и указатель на нее.
В примере NEWINTRO мы использовали функцию strcpy() для копирования строки str в выделенный участок памяти, на который указывает указатель ptr. Строка полностью займет этот участок памяти, так как его размер равен длине строки str. Результат работы программы NEWINTRO будет следующим:
ptr - Дурная голова ногам покоя не дает.

Рис. 10.14. Память, выделенная с помощью операции new
Программисты, использующие C, говорят, что оператор new играет роль, по- хожую на роль семейства функций malloc() библиотеки функций. Преимущест- во операции new в том, что он сразу возвращает указатель на соответствующий тип данных, в то время как указатель функции malloc() должен быть явно пре- образован к соответствующему типу.
Программистам, использующим C, может быть интересно, существует ли в C++ функция для изменения размера памяти, которая была уже перераспре- делена, эквивалентная функции realloc(). К сожалению, операции renew в языке С++ не существует. Вам придется пойти на хитрость, выделить с помощью опе- рации new большее или меньшее количество памяти, а затем скопировать ваши данные в новый блок памяти.
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Схожі підручники
- Розділ ІІ (ЗМ 2) Господарство та економічна думка суспільства Європейської цивілізації в період середньовіччя (кінець V – ХV ст.)
- Основы эффективных продаж (онлайн)
- Філософія Хрестоматія (частина 2)
- Сила воли. Как развить и укрепить (онлайн)
- Філософія Хрестоматія (частина 1)
- Загальні питання з курсу Регіональна Економіка
