С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 5.00
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
#1

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

15.12.2011, 19:57. Просмотров 2633. Ответов 13
Метки нет (Все метки)

Обязательно ли использовать оператор 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);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2011, 19:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как работает оператор new? (C++):

Как работает оператор if? - C++
Народ! Операция сравнения возвращает ЧИСЛО, т.е. while и if принимают ЧИСЛО (0 - false, etc - true). Вопрос 1) Почему нельзя записать...

Как работает оператор typedef - C++
как работает оператор typedef если есть у кого сам код то пришлите,интересно:)

Как работает тернарный оператор - C++
Здравствуйте. Объясните, пожалуйста, что значит эта строка color = (color == 'W') ? 'B' : 'W';

Как работает оператор switch? - C++
Shape* generator() { switch(rand() % 3) { case 0: return new Triangle; case 1: return new Rectangle; case 2: return new...

Как работает оператор char *? - C++
Как работает оператор char *! Можете описать его принцип работы! Спасибо заранее!

Как работает оператор new, он же _Znwj на асме - C++
Собственно как действительно он работает? То есть что реально происходит какие инструкции (грубо говоря) он выполняет? Откуда проц (в...

13
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,547
Завершенные тесты: 3
15.12.2011, 20:01 #2
ogcjm124, Нет. получим утечку
0
ogcjm124
2 / 2 / 0
Регистрация: 31.07.2011
Сообщений: 143
15.12.2011, 20:43  [ТС] #3
Я был бы очень благодарен,если бы вы пояснили свой ответ
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
15.12.2011, 20:54 #4
ogcjm124, pStr указывает на начало выделенной памяти, вы затираете адрес начала старого блока, началом нового блока => старый блок уже никак не освободить, это может сделать только ОС
1
Chelioss
180 / 180 / 4
Регистрация: 08.01.2011
Сообщений: 1,133
15.12.2011, 20:58 #5
Старая память новой не затирается, потому что старая память еще остается занятой.
Но вот если старую память освободить оператором delete, то возможно при выделении памяти именно в это место выделиться память, но не факт. На это рассчитывать не стоит, да и не зачем.
1
Андрей2011
29 / 23 / 2
Регистрация: 18.01.2011
Сообщений: 359
16.12.2011, 17:38 #6
Ммм вставлю и своих 5 коппек.
Уважаемый, ForEveR был прав. Вообще сколько есть new столько должно быть delete. Это есть закон который нельзя нарушать.
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
16.12.2011, 17:56 #7
Цитата Сообщение от ogcjm124 Посмотреть сообщение
После использования оператора new старая область память выделенная для pStr разве автоматически не затрётся?
Если сильно утрировать, то можно сказать так. Оператор new помечает блок памяти как используемый. Оператор delete помечает блок памяти как свободный. Оператор new не может вернуть адрес уже используемого блока - никогда не может. Так вот, если был new, но не было delete, то некоторый блок навсегда останется "используемым". Что и называется утечкой памяти.
0
besss2011
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 15
16.12.2011, 19:48 #8
new-определяет динамический массив, который в ходе роботы программы не изменяется и чтобы освободить этот массив после того, как он уже не будет нужен, используют delete, в результате программа будет меньше употреблять оперативной памяти.Просто для оптимизации приложения
0
fasked
Эксперт С++
4951 / 2531 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
17.12.2011, 10:54 #9
Цитата Сообщение от besss2011 Посмотреть сообщение
Просто для оптимизации приложения
Правда? Я если delete не использовать, то ничего плохого видимо случится не может в принципе.
0
Evg
Эксперт CАвтор FAQ
18377 / 6424 / 441
Регистрация: 30.03.2009
Сообщений: 17,830
Записей в блоге: 28
17.12.2011, 12:11 #10
Цитата Сообщение от fasked Посмотреть сообщение
Правда? Я если delete не использовать, то ничего плохого видимо случится не может в принципе.
Если программа потребляет много памяти и если память не освобождать, то рано или поздно упрёмся в то, что доступной памяти больше нет
0
fasked
17.12.2011, 12:46
  #11

Не по теме:

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

0
Evg
17.12.2011, 13:11
  #12

Не по теме:

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

0
fasked
17.12.2011, 13:29
  #13

Не по теме:

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

0
Evg
17.12.2011, 13:35     Как работает оператор new?
  #14

Не по теме:

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

Не по теме:


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

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

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.12.2011, 13:35
Привет! Вот еще темы с ответами:

Как работает оператор cout и return? - C++
Допустим есть функция: int show() { int g = 5; cout << (g>7)?1:2; return g>7?1:2; }return на выражение g>7?1:2...

Уточнение о том как работает оператор for - C++
Я правильно понимаю? Оператор for, сперва будет работать только с первым выражением до тех пор, пока оно не станет ложным не переходя ко...

Поясните как работает постфиксный и префиксный оператор на примере - C++
Здравствуйте. Здесь префиксный понятно, а что если изменить на постфиксный, как код будет работать? vector<int>::size_type...

Не работает оператор if - C++
//--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <math.h> ...


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

Или воспользуйтесь поиском по форуму:
14
17.12.2011, 13:35
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.