|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.09.2014, 11:42 | #1 |
Пользователь
Регистрация: 18.03.2011
Сообщений: 37
|
Нужно ли использовать delete ?
Добрый день. У меня такой вопрос: если мы в функции ( обычной или в методе класса ) выделяем память:
Код:
|
03.09.2014, 11:50 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,342
|
Память, выделенную через new, нужно всегда удалять явно.
Не забывайте, что для массивов нужно использовать delete []. |
03.09.2014, 19:17 | #3 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
|
03.09.2014, 19:35 | #4 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,604
|
Если в функции выделена память оператором new и не освобождена delete, то происходит утечка памяти. То есть она не будет освобождена автоматически при выходе из функции.
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
03.09.2014, 19:37 | #5 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
|
|
03.09.2014, 19:50 | #6 |
Участник клуба
Регистрация: 30.07.2008
Сообщений: 1,604
|
В другом месте удалить не получится, так как указатель утерян после выхода из функции в примере автора этой темы
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
|
03.09.2014, 22:06 | #7 |
Старожил
Регистрация: 19.08.2009
Сообщений: 2,119
|
exelim
Нужно ли писать тут оператор delete либо же память будет автоматически освобождена по выходу из функции ? при программировании на "си с классами" (как у тебя) - нужно в современном c++ - не нужно.
А вы почему со мной не соглашаетесь, у вас что, импотенция? (c) ACE Valery
|
04.09.2014, 12:50 | #8 |
Пользователь
Регистрация: 25.12.2013
Сообщений: 91
|
Да - программа будет работать если не освободить память в этой функции. Но авторитетные авторы книг, все же призывают к тому, что количество операторов new должно быть равно количеству операторов delete. Это как хороший тон в программировании. Тем более, что память у вас выделяется не в главной функции, а в той, что вы самостоятельно создали.
Как правильно заметил challengerr ("В другом месте удалить не получится, так как указатель утерян после выхода из функции"), и мы уже не сможем обратиться к этой памяти из другого места в программе, чтобы её освободить. |
04.09.2014, 15:43 | #9 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
да и 64-битная прога сильно подорвет работу системы. (наблюдал в чужой проге утечку, заметил когда прога сожрала 16ГБ оперативки, ибо стало неуютно работать) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
04.09.2014, 16:19 | #10 | |
Санитар
Старожил
Регистрация: 04.10.2008
Сообщений: 2,577
|
Цитата:
А так... классический пример - паттерн синглтон. Память может вообще не освобождаться, но это не создает проблему, т.к. выделена она будет лишь один раз, при первом обращении к объекту. Короче если такая функция вызывается редко, то падения можно ждать долго. Ну а лучше взять какой-нибудь valgrind и проверить все . |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Когда нужно использовать ООП? | leklerk | Общие вопросы по программированию, компьютерный форум | 49 | 01.06.2012 09:09 |
задача в паскаль. нужно использовать оператор выбора | Наталья Николаевна | Паскаль, Turbo Pascal, PascalABC.NET | 1 | 19.02.2012 13:32 |
Нужно удалить указатель на массив - на строке с delete вылетает Debug Error. | ImmortalAlexSan | Общие вопросы C/C++ | 18 | 07.06.2011 17:49 |
error C2541: 'delete' : cannot delete objects that are not pointers | novokhatsky | Общие вопросы C/C++ | 2 | 14.12.2009 10:25 |
Перегрузка операций new, new[], delete, delete[] | IgorKr | Общие вопросы C/C++ | 1 | 22.10.2008 12:14 |