Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Создание отчето... 63889
Модуль Forms 63622
ТЕХНОЛОГИИ ДОСТ... 60470
Пример работы с... 59819
Имитационное мо... 55931
Реклама
Сейчас на сайте
Гостей: 5
На сайте нет зарегистрированных пользователей

Пользователей: 13,079
новичок: Openair
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
База данных склада на Delphi + Схема БД
Моделирование работы узла коммутации сообщений на GPSS + Пояснительная з...

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Операторы класса new и delete


Оператор new – это универсальный оператор, получающий память у операционной системы и возвращающий указатель на начало выделенного блока. Для освобождения выделенных участков памяти и возврата их операционной системе используется оператор delete. Причем освобождение памяти не подразумевает удаление указателя, связанного с этим блоком памяти; это и не изменение адреса значения, на которое указывает указатель. Однако этот указатель не имеет силы. Память, на которую он указывает, может быть применена для других целей.
Оператор new очень часто используется в конструкторах классов, а delete соответственно в деструкторах.
Указатели могут указывать на объекты так же, как и на простые типы данных и массивы. Например:

#include <iostream>

using namespace std;

class Distance

{

private:

int feet;

float inches;

public:

void GetDist()

{

cout <<”Введите футы”;

cin >> feet;

cout <<”Введите дюймы”;

cin >> inches;

}

void ShowDist()

{ cout << feet << “\’-“ << inches<<’\”’; }

};



int main()

{

Distance Dist; //создаем объект типа Distance

Dist.GetDist(); //получаем данные

Dist.ShowDist(); //отображаем данные на мониторе

//создаем указатель на объект типа Distance

Distance* pDist;

pDist = new Distance(); //создаем объект Distance

pDist->GetDist(); //получаем данные

pDist->ShowDist();//отображаем данные на мониторе



if (pDist) delete pDist; //освобождаем память

return 0;

}




Иногда может встретиться другой более общий способ применения операции new для выделения памяти для объектов. Так как new возвращает указатель на блок памяти, содержащий объект, то мы имеем возможность обратиться к первоначальному объекту путем разыменования указателя. Например, можно переписать функцию main следующим образом:

i
nt main()
{
//создаем объект типа Distance
Distance& Dist = *(new Distance);
Dist.GetDist(); //доступ к членам класса
//осуществляем через оператор “.”
Dist.ShowDist(); //отображаем данные на мониторе

return 0;
}





Выражение new Distance возвращает указатель на блок памяти, достаточный для размещения объекта Distance, и мы можем обратиться к первоначальному объекту, используя *(new Distance).
На этот объект указывает указатель. Используя ссылку, мы определили Dist как объект класса Distance и определили его равным *(new Distance). Теперь мы можем ссылаться на члены объекта Dist, используя операцию точки . , а не операцию ->.
Этот подход используется реже, чем указатели на объекты, полученные с использованием операции new, но он работает точно так же.
Способом, аналогичным вышеописанному, выделяется память и под массивы объектов. Например:


//создаем массив из 7 элементов типа Distance
Distance DistMas[7];

//обращаемся к методу 3-го элемента массива
DistMas[2].ShowDist();

//создаем массив из 5 указателей на Distance
Distance *pDistMas[5];
for (int i=0; i<5; i++)
{
//создаем объект типа Distance
pDistMas[i] = new Distance;
//обращаемся к методу i-го элемента массива
pDistMas[i]->GetDist();
}






Отметим, что в этом случае удалить созданный нами с помощью оператора new массив указателей, просто вызвав
delete []pDistMas;



нельзя. Так как эта запись удалит массив указателей, но не объекты, на которые они указывают. Поэтому мы должны вызвать каждый элемент массива и применить к нему оператор delete:

for (i=0; i<5; i++)
delete pDistMas[i];




Класс может предусматривать применение своих собственных вариантов операторов new и delete. При этом
• - функция тип_класса::operator new будет вызываться всякий раз, когда создается динамический объект;
• - функция тип_класса::operator new[] будет вызываться всякий раз, когда создается динамический массив объектов;
• - функция тип_класса::operator delete будет вызываться вся-кий раз, когда уничтожается динамический объект;
• - функция тип_класса::operator delete [] будет вызываться вся-кий раз, когда уничтожается динамический массив объектов.
Например:

class X
{

public:
void *operator new(long sz){return myalloc(sz); };
void *operator delete(X *p) { myfree(p); };
X(){/*Инициализация*/};

}




Для объектов класса X вместо операторов new и delete будут использоваться X::operator new и X::operator delete. Глобальный оператор new, как и прежде, может использоваться для выделения памяти для объектов других типов.
Опубликовал Kest July 28 2010 15:48:48 · 0 Комментариев · 20266 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
CaptionButton
Медиа комбайн
Основы Delphi. Пр...
Удаление своего EXE
XPcontrol
Программирование ...
Mass Photo Upload
Меню проводника в...
Pro-Download Sys...
XPmenu
Rss Parser
Geo-Whois
Task Shedule
NetGraph [Исходни...
IpEditAdress
Averaging [Исходн...
Info
AddPage [Исходник...
AdBlaster v2.5 - ...
Delphi Быстрый Ст...

Топ загрузок
Приложение Клие... 100449
Delphi 7 Enterp... 85798
Converter AMR<-... 20067
GPSS World Stud... 12518
Borland C++Buil... 11572
Borland Delphi ... 8504
Turbo Pascal fo... 7023
Visual Studio 2... 4989
Калькулятор [Ис... 4739
FreeSMS v1.3.1 3536
Случайные статьи
Политикибезопаснос...
Архитектура Ethern...
Кроме того, устано...
Класс TCanvas
Ещё о защите e-mai...
Резервная копия
Работа с папками SMS
east.microsoft.
административных г...
Каков наилучший сп...
Покер приложения д...
Символы, используе...
Присвоение начальн...
В результате вам п...
ЧТО ТАКОЕ НОРМАЛИЗ...
Содержание
Унификация доступа...
Обращение к файлу ...
Playstation 2
Доступ к рабочей к...
Программирование с...
Работа с текстовым...
модель для хранени...
Работа с переключа...
Правила работы с ф...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?