Навигация
Главная
Поиск
Форум
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
Создание отчето... 65419
Модуль Forms 65184
Пример работы с... 64331
ТЕХНОЛОГИИ ДОСТ... 61829
Имитационное мо... 57750
Реклама
Сейчас на сайте
Гостей: 10
На сайте нет зарегистрированных пользователей

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

Расчет мер близости на отношениях на Delphi + Пояснительная записка
Обработка задач на ЭВМ на GPSS + Пояснительная записка
Меры близости на векторах в Delphi + Блок схемы

Реклама



Подписывайся на 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 Комментариев · 20815 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Delphi 7: Для про...
JanButtonsV
Игра Car [Исходни...
Самоучитель PHP 5...
Delphi 2005 для .NET
PrevInst
EMSQuickImport
Открытие Cd-ROM'a...
DelphiXIsoDemo1
ProLIB18
БД студентов
3d Tank [Исходник...
Карта сайта
Counter [Исходник...
Web Регистрация
39 статьи по Delphi
Binary2XMLDemo (Р...
Animation Effect ...
Разработка Web-пр...
Библия хакера 2. ...

Топ загрузок
Приложение Клие... 100469
Delphi 7 Enterp... 87040
Converter AMR<-... 20078
GPSS World Stud... 12815
Borland C++Buil... 11830
Borland Delphi ... 8602
Turbo Pascal fo... 7039
Visual Studio 2... 4999
Калькулятор [Ис... 4798
FreeSMS v1.3.1 3542
Случайные статьи
asserta(X), assert...
Передача коммутато...
Значения атрибутов
ИЗУЧЕНИЕ ПРОГРАММН...
УНАСЛЕДОВАТЬ, ВКЛЮ...
Состав нового меню...
Label not within c...
Исследование внутр...
УСТРОЙСТВА В GPSS
Язык С: операции н...
Undefined external
Поиск в Гугле
Заголовок программы
PHP: удаление стро...
Модуль CRT. Тексто...
Применение динамич...
OpenGL. СФЕРА И КОНУС
HTPC на базе Windows
Шаблон документа
Планируя агенты во...
Публикация записи
Модуль интерфейса
Программируем на PHP
для служб терминал...
More Book Stuff
Статистика



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


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