|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.06.2014, 23:23 | #1 |
Пользователь
Регистрация: 18.03.2011
Сообщений: 37
|
Использование delete
Добрый день. У меня вопрос насчет операторов new и delete.
Если мы в main() объявляем указатель с использованием new то вконце его нужно удалить с использованием delete. А что если выделение памяти мы делаем в функции, которую потом вызываем из main() ? По идеи переменные должны уничтожаться при выходе из функции, а что касается указателя ? ИЛи перед выходом из функции надо также явно самому вызвать delete ? |
02.06.2014, 23:48 | #2 |
Форумчанин
Регистрация: 22.12.2011
Сообщений: 378
|
При выделении памяти в функции в указатель записывается адрес блока в памяти. В delete вы передаете указатель. При выходе из функции уничтожается единственный указатель на этот блок и он (блок) остается висеть пока выполняется программа. После завершение выполнения программы, система освободит все ресурсы программы.
Не обязательно перед выходом из функции. Память можно выделить, когда выделенный блок больше не нужен, а это может произойти не в конце функции. Так же память можно освободить и после функции, но нужно сохранить адрес блока: Код:
Код:
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
Последний раз редактировалось kineziz; 03.06.2014 в 00:00. |
03.06.2014, 10:25 | #3 |
Пользователь
Регистрация: 03.11.2010
Сообщений: 95
|
Пользоваться умными указателями. Или как сказали выше, использовать RAII для своих решений. Но ни в коем случае не привыкать проектировать программу так, чтобы вне функции думать о ее реализации.
|
03.06.2014, 11:19 | #4 |
Старожил
Регистрация: 16.12.2011
Сообщений: 2,329
|
правило просто: кто выделял, тот и освобождает.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
delete[] c++ | NiCola999 | Общие вопросы C/C++ | 4 | 26.02.2010 22:16 |
delete [] | nazavrik | Общие вопросы C/C++ | 6 | 15.01.2010 22:46 |
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 |