Форум программистов, компьютерный форум CyberForum.ru

Как работает оператор new? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
15.12.2011, 19:57     Как работает оператор new? #1
Обязательно ли использовать оператор delete в коде (см.ниже.).После использования оператора new старая область память выделенная для pStr разве автоматически не затрётся?

Есть код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//конструктор
CMyString::CMyString(){
        pStr=new char[1];
        *pStr=(char)0;
}
 
//функция изменяющая pStr
 
void CMyString::Set(char *pNewStr){
                      delete []pStr;                  
        pStr=new char[strlen(pNewStr)+1];
        Copy(pStr,pNewStr);
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 19:57     Как работает оператор new?
Посмотрите здесь:

C++ Как работает оператор typedef
Оператор+ не работает((( C++
C++ Не работает оператор gets()
C++ Как работает оператор if?
C++ Как работает оператор char *! Спасибо заранее!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
15.12.2011, 20:01     Как работает оператор new? #2
ogcjm124, Нет. получим утечку
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
15.12.2011, 20:43  [ТС]     Как работает оператор new? #3
Я был бы очень благодарен,если бы вы пояснили свой ответ
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.12.2011, 20:54     Как работает оператор new? #4
ogcjm124, pStr указывает на начало выделенной памяти, вы затираете адрес начала старого блока, началом нового блока => старый блок уже никак не освободить, это может сделать только ОС
Chelioss
179 / 179 / 4
Регистрация: 08.01.2011
Сообщений: 1,131
15.12.2011, 20:58     Как работает оператор new? #5
Старая память новой не затирается, потому что старая память еще остается занятой.
Но вот если старую память освободить оператором delete, то возможно при выделении памяти именно в это место выделиться память, но не факт. На это рассчитывать не стоит, да и не зачем.
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
16.12.2011, 17:38     Как работает оператор new? #6
Ммм вставлю и своих 5 коппек.
Уважаемый, ForEveR был прав. Вообще сколько есть new столько должно быть delete. Это есть закон который нельзя нарушать.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
16.12.2011, 17:56     Как работает оператор new? #7
Цитата Сообщение от ogcjm124 Посмотреть сообщение
После использования оператора new старая область память выделенная для pStr разве автоматически не затрётся?
Если сильно утрировать, то можно сказать так. Оператор new помечает блок памяти как используемый. Оператор delete помечает блок памяти как свободный. Оператор new не может вернуть адрес уже используемого блока - никогда не может. Так вот, если был new, но не было delete, то некоторый блок навсегда останется "используемым". Что и называется утечкой памяти.
besss2011
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 15
16.12.2011, 19:48     Как работает оператор new? #8
new-определяет динамический массив, который в ходе роботы программы не изменяется и чтобы освободить этот массив после того, как он уже не будет нужен, используют delete, в результате программа будет меньше употреблять оперативной памяти.Просто для оптимизации приложения
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
17.12.2011, 10:54     Как работает оператор new? #9
Цитата Сообщение от besss2011 Посмотреть сообщение
Просто для оптимизации приложения
Правда? Я если delete не использовать, то ничего плохого видимо случится не может в принципе.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16821 / 5242 / 318
Регистрация: 30.03.2009
Сообщений: 14,118
Записей в блоге: 26
17.12.2011, 12:11     Как работает оператор new? #10
Цитата Сообщение от fasked Посмотреть сообщение
Правда? Я если delete не использовать, то ничего плохого видимо случится не может в принципе.
Если программа потребляет много памяти и если память не освобождать, то рано или поздно упрёмся в то, что доступной памяти больше нет
fasked
17.12.2011, 12:46
  #11

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Если программа потребляет много памяти и если память не освобождать, то рано или поздно упрёмся в то, что доступной памяти больше нет
Эм? Этот комментарий адресован в мою сторону?

Evg
17.12.2011, 13:11
  #12

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
Этот комментарий адресован в мою сторону?
Комментарий касается фразы "в принципе"

fasked
17.12.2011, 13:29
  #13

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Комментарий касается фразы "в принципе"
В моей фразе не хватало таблички "сарказм"

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 13:35     Как работает оператор new?
Еще ссылки по теме:

C++ Как работает оператор switch?
C++ Как работает тернарный оператор
C++ Не работает оператор if с сравнением (if (b == x)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
17.12.2011, 13:35     Как работает оператор new?
  #14

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение

Не по теме:


В моей фразе не хватало таблички "сарказм"

Ну вот после таких фраз без табличек и начинают люди кривые коды писать. И потом всем доказывать "а мне вот на форуме сказали"

Yandex
Объявления
17.12.2011, 13:35     Как работает оператор new?
Ответ Создать тему
Опции темы

Текущее время: 06:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru