Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Обьясните как использовать new и delete

629
09 апреля 2002 года
TekiL
19 / / 20.09.2000
Обьясните пожалуйста в чем интерес использования new и delete. книжка у меня англицкая и очень запутаная
и в чем разница между ипользованием вышеупомянутых операторов и работой с локальными переменными (т.е. время жизни переменной определяется {} в которых она и была создана)
спасибо
475
09 апреля 2002 года
Winnie
90 / / 20.03.2000
Цитата:

On 2002-04-09 1324, TekiL wrote
Обьясните пожалуйста в чем интерес использования new и delete. книжка у меня англицкая и очень запутаная
и в чем разница между ипользованием вышеупомянутых операторов и работой с локальными переменными (т.е. время жизни переменной определяется {} в которых она и была создана)
спасибо



Хм... Если просто разницу то
- при локальной переменной память под нее выделяется в стеке и по выходу из зоны видимости перемнной она удаляется.
- при использовании new память выделяется в "куче"* и сохраянется до тех пор пока не вызван delete (или пока программа не отработает - но это уже клиника)

Резюме
- если объект нужен только в процедуре и никуда наружу не передается и не используется - то используй просто локальную переменную (без new/delete)
- если надо использование объекта в нескольких процедурах тогда надо размещать его в "куче" при помощи new/delete

*"куча" - это такая область памяти специально для размещения объектов в ней

582
18 августа 2002 года
MuToGeN
56 / / 20.07.2000
Цитата:

On 2002-04-09 1324, TekiL wrote
Обьясните пожалуйста в чем интерес использования new и delete. книжка у меня англицкая и очень запутаная
и в чем разница между ипользованием вышеупомянутых операторов и работой с локальными переменными (т.е. время жизни переменной определяется {} в которых она и была создана)
спасибо


короче дела такие
если создаешь указатель на объект/массив/структуру/на худой конец переменную, то потом чтоб работать с самим объектом или чем-то еще надо либо заставить этот указатель ссылаться на существующий объект или что-то

MyClass Object;
// объект, без указателя, создается сразу
MyClass *ObjectPointer;
// указатель, пока просто указатель равный NULL
ObjectPinter = *Object;

теперь ObjectPointer указывает на Object, и будет одно и тоже, если сделать
Object.SomeFunc();
и
ObjectPointer->SomeFunc();

второй вариант - new и delete

MyClass *Ptr;
Ptr = new MyClass;
// созлали указатель, потом объект

почему не всегда подходит первый вариант
- динамическое создание массивов (если размер сразу не известен)
- типа того же, только с объектами, когда заранее не известен класс. тогда можно объявить общий класс-предок для всех неизвестных заранее вариантов, на худой конец "пустой указатель" (void*)

еще одна вещь если что-то создаешь с помощью new, то при выходе из зоны видимости и указатель и сам объект/массив/что-то еще по любому уходят в небытье (только если они не static)

582
18 августа 2002 года
MuToGeN
56 / / 20.07.2000
Цитата:

в чем разница между ипользованием вышеупомянутых операторов и работой с локальными переменными


а когда машина едет, воздух внутри колеса крутится?

577
19 августа 2002 года
Mozhay
81 / / 20.09.2000
Прошу прощения, что повторю уже сказанное.
new/delete используются
1. Если нужно создать объект с временем жизни, не ограниченным локальной областью (в отличие от локальных переменных).
2. Если размер выделяемого объекта (объектов) достаточно велик. Если создать локальный объект (объекты), то можно переполнить стек.
3. Если нужно создать объект не фиксированного класса.
4. Если нужно выделить массив объектов неизвестного заранее размера. При этом надо помнить, что если создавался массив (new []), то для его удаления надо вызывать delete [].

Возьми нормальную книжку. Например, Страуструп "Язык программирования C++", Спец. издание.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог