Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том1)" -> 35

Visual С++ 6. Полное руководство: В 2 т.(том1) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том1) — Бином, 2006. — 569 c.
Скачать (прямая ссылка): vicualcc2006t1.djvu
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 204 >> Следующая

Совет
Убедитесь, не вызывается ли оператор delete более одного раза с использованием одного адреса. Впрочем, удаление указателя, содержащего 0, всегда безобидно. Поэтому хорошим стилем программирования является установка указателя переменной в 0 сразу после использования оператора delete.
Операторы new и delete полезны для динамического создания объектов в памяти, особенно когда число или размер объектов неизвестны при компиляции. Кроме того, в отличие от глобального или локального объекта, можно точно управлять периодом жизни объекта, созданного оператором new. Глобально определенный объект остается в памяти на протяжении всего времени исполнения программы. Локально определенный объект существует, пока управление программы остается в блоке, в котором он определен. Объект же, созданный оператором new, может быть помещен в любую точку программы и освобожден в любой точке программы с использованием оператора delete.
Операторы new и delete обычно удобней традиционных семейств функций распределения памяти malloc, предоставляемых библиотекой времени выполнения. В отличие от malloc, операция new автоматически определяет правильный размер объекта и возвращает указатель корректного типа. Как вы увидите в гл. 4, при использовании оператора new для объектов типа класс, автоматически вызывается конструктор класса (т.е. функция, инициализирующая его). При использовании оператора delete автоматически вызывается деструктор класса (если он был определен).
Примечание
Операторы new и delete можно перегрузить, чтобы настроить управление памятью в программе. Общие вопросы перегрузки операторов рассмотрены в гл. 6. Информация о перегрузке операторов new и delete представлена следующими разделами встроенной документации: Visual С++ Documentation, Reference, C/C++ Language and С++ Libraries, С++ Language Reference, Special Member Reference, The new and delete Operators.
Выделение памяти массивам оператором new
При выделении памяти для размещения массивов с помощью оператора new задается базовый тип данных (т.е. тип данных элементов массива) и число элементов, указываемое внутри квадратных скобок "[]", например:
void Func (int Size) !
char *String = new char [25]; //массив из 25 символов
int *ArrayInt = new int [Size]; //массив из 'Size' целых
double *ArrayDouble;
ArrayDouble = new double [32]; //массив из 32 двойной точности
// ...
}
При выделении памяти для размещения массива, оператор new возвращает адрес первого элемента массива. Обратите внимание: здесь можно указать число элементов массива, используя переменную, что было недопустимо в объявлении переменной массива.
Чтобы освободить массив, к оператору delete при вызове требуется добавить пару квадратных скобок "[]", обозначающих, что освобождается массив, а не единичный объект базового типа. Например, следующие операторы освобождают массивы, размещенные в предыдущем примере:
delete [] String; delete [] Arraylnt; delete [] ArrayDouble;
Инициализация выделенной памяти
Блок памяти, выделенный с помощью оператора new, не может быть инициализирован автоматически значениями 0. Однако при использовании оператора new для выделения памяти объекту встроенного типа (например, char) можно явно инициализировать объект константой соответствующего типа, используя следующий синтаксис:
char *PChar = new char ('a')/' // инициализирует char значением 'a' int *PInt = new int (3); // инициализирует int значением 3
Объект определенного пользователем типа (например, структура) можно также инициализировать существующим объектом этого типа.
struct Node
{
char *String; int Value; Node *Next; };
void Func () (
Node NodeA = ("hello", 1, Ob-Node *PNode = new Node (NodeA); )
Содержимое NodeA будет скопировано поле за полем в новый объект, память для которого выделена оператором new.
Примечание
Нельзя инициализировать массив встроенного типа изнутри оператора new (необходимо самому написать код, инициализирующий массив после выполнения оператора new). Однако (гл. 4) можно задать специальную функцию (называемую конструктором класса) для инициализации массива, тип которого определяется пользователем, если память для размещения массива была выделена оператором new.
Итоги
В этой главе вы узнали, как перевести программу с языка С на С++ и как начать писать новые программы на С++. Здесь же описано множество новых средств, предоставляемых С++, которые не связаны с классами. Итак, вы узнали следующее:
• Язык С++ является своеобразным расширением языка С, кроме немногих исключений, следовательно, можно перейти к программированию на С++, компилируя программы, написанные на С, используя компилятор С++ вместо компилятора С. Затем можно постепенно добавлять в код уникальные средства языка С++.
• Чтобы использовать компилятор С++, задайте расширение имени исходного файла ,срр или ххх.
• Существует несколько конструкций, которые, возможно, потребуется изменить при компиляции программы, написанной на С, компилятором языка С++.
• Практически все эти конструкции являются устаревшей практикой программирования на языке С и будут замечены компилятором С++.
Предыдущая << 1 .. 29 30 31 32 33 34 < 35 > 36 37 38 39 40 41 .. 204 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100