
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.97.9.169] |
![]() |
|
Сообщ.
#1
,
|
|
|
![]() ![]() int *ttt = new int[10000000000000000000000]; delete[] ttt; ttt = NULL. Обязательно ли занулять указатель? Если да - в какой литературе об этом прочитать? В учебниках ни об этом, ни о сборщике мусора вообще ничего нет. |
Сообщ.
#2
,
|
|
|
Необязательно. Просто, если вы далее будете вручную следить за указателями и очищать память при ненулевых, то будет изъян. А если такого нет, то можно и забить.
|
Сообщ.
#3
,
|
|
|
Обычная говнокодерская практика, передаваемая из уст в уста. Паттерн проектирования так сказать. Для себя пишем можно чистить или нет.
|
![]() |
Сообщ.
#4
,
|
|
scrambrella, не знаешь, откуда звон, попридержи язык.
|
Сообщ.
#5
,
|
|
|
Цитата Qraizer @ scrambrella, не знаешь, откуда звон, попридержи язык. Что я не знаю? Невыделенная память помечается нулевым указателем. Если он ненулевой значит память выделена и может быть очищена. Я неправильно понимаю? |
Сообщ.
#6
,
|
|
|
Цитата Qraizer @ Qraizer. Он правильно понимает? ))) Прикреплённая картинка
Добавлено Нашел такое мнение. "arr[i] = NULL; //освобождаем указатель, если его копия хранится еще где-либо в другом месте //объект не будет уничтожен" https://www.cyberforum.ru/post1005751.html Добавлено Есть еще такое мнение. "Обычно советуют обнулять указатель после освобождения указываемой им памяти, чтобы при повторной попытке удаления памяти не возникла ошибка выполнения программы. Например, данный код корректен" https://ru.stackoverflow.com/questions/5964...80%d0%b0-delete Вопрос еще и в том, что даже если 10 из 10 скажут "удалять надо" - указано будет 10 разных причин. Как выявить правильные? В какой литературе об этом написано и на каких страницах? |
![]() |
Сообщ.
#7
,
|
|
Цитата Сергей85 @ Беспонятия. Я не знаю языка, на котором он выражает свои... мысли.Qraizer. Он правильно понимает? ))) Цитата Сергей85 @ Там не указатель, там boost::shared_ptr<>. Это объект со своим поведением, притворяющийся указателем. Главным его отличием от указателя является то, что он владеет объектом, на который указывает, и умеет подсчитывать количество его пользователей. Присваивание себе нуля он рассматривает как уменьшение количества пользователей. Это всё не имеет никакого отношения к обычным указателям, о которых ты спрашивал.Нашел такое мнение. По второй ссылке более дельные мысли. Но то же сказал и Славян. Его хотя бы понять возможно, хоть и не без труда. Цитата Сергей85 @ Просто нужно прочитать все эти 10 причин и сделать свои выводы. Обычно зануление в таких случаях это паранойя на действия самого себя. Но не всегда, смотря как пишешь и какие идеи реализуешь, а также это может быть частью используемого тобой API. Например в VCL принято не просто delete-ить TObject, но и занулять поинтер на него, в Дельфях даже спецом процедуру для этого придумали, FreeAndNil. А всё потому, что там тоже есть понятие владельца объекта, но увы, нет shared_ptr, так что пришлось выдумать такой вот костыль....даже если 10 из 10 скажут "удалять надо" - указано будет 10 разных причин. Как выявить правильные? В какой литературе об этом написано и на каких страницах? В общем, пользовать чи не, абсолютно твоё решение. Ничего конкретного советовать не буду. |
Сообщ.
#8
,
|
|
|
В качественном промышленном коде указателей не должно быть в принципе. Для хранения массивов данных необходимо использовать контейнеры.
|