На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> Происхождение действия: занулление указателя после delete. , Любая среда программирования.
    ExpandedWrap disabled
      int *ttt = new int[10000000000000000000000];
       
      delete[] ttt;
       
      ttt = NULL.

    Обязательно ли занулять указатель? Если да - в какой литературе об этом прочитать? В учебниках ни об этом, ни о сборщике мусора вообще ничего нет.
      Необязательно. Просто, если вы далее будете вручную следить за указателями и очищать память при ненулевых, то будет изъян. А если такого нет, то можно и забить.
        Обычная говнокодерская практика, передаваемая из уст в уста. Паттерн проектирования так сказать. Для себя пишем можно чистить или нет.
          scrambrella, не знаешь, откуда звон, попридержи язык.
            Цитата Qraizer @
            scrambrella, не знаешь, откуда звон, попридержи язык.

            Что я не знаю? Невыделенная память помечается нулевым указателем. Если он ненулевой значит память выделена и может быть очищена.
            Я неправильно понимаю?
              Цитата Qraizer @

              Qraizer. Он правильно понимает? )))

              Прикреплённая картинка
              Прикреплённая картинка


              Добавлено
              Нашел такое мнение.

              "arr[i] = NULL; //освобождаем указатель, если его копия хранится еще где-либо в другом месте
              //объект не будет уничтожен"

              https://www.cyberforum.ru/post1005751.html

              Добавлено
              Есть еще такое мнение.

              "Обычно советуют обнулять указатель после освобождения указываемой им памяти, чтобы при повторной попытке удаления памяти не возникла ошибка выполнения программы. Например, данный код корректен"

              https://ru.stackoverflow.com/questions/5964...80%d0%b0-delete

              Вопрос еще и в том, что даже если 10 из 10 скажут "удалять надо" - указано будет 10 разных причин. Как выявить правильные? В какой литературе об этом написано и на каких страницах?
              Сообщение отредактировано: Сергей85 -
                Цитата Сергей85 @
                Qraizer. Он правильно понимает? )))
                Беспонятия. Я не знаю языка, на котором он выражает свои... мысли.
                Цитата Сергей85 @
                Нашел такое мнение.
                Там не указатель, там boost::shared_ptr<>. Это объект со своим поведением, притворяющийся указателем. Главным его отличием от указателя является то, что он владеет объектом, на который указывает, и умеет подсчитывать количество его пользователей. Присваивание себе нуля он рассматривает как уменьшение количества пользователей. Это всё не имеет никакого отношения к обычным указателям, о которых ты спрашивал.
                По второй ссылке более дельные мысли. Но то же сказал и Славян. Его хотя бы понять возможно, хоть и не без труда.
                Цитата Сергей85 @
                ...даже если 10 из 10 скажут "удалять надо" - указано будет 10 разных причин. Как выявить правильные? В какой литературе об этом написано и на каких страницах?
                Просто нужно прочитать все эти 10 причин и сделать свои выводы. Обычно зануление в таких случаях это паранойя на действия самого себя. Но не всегда, смотря как пишешь и какие идеи реализуешь, а также это может быть частью используемого тобой API. Например в VCL принято не просто delete-ить TObject, но и занулять поинтер на него, в Дельфях даже спецом процедуру для этого придумали, FreeAndNil. А всё потому, что там тоже есть понятие владельца объекта, но увы, нет shared_ptr, так что пришлось выдумать такой вот костыль.
                В общем, пользовать чи не, абсолютно твоё решение. Ничего конкретного советовать не буду.
                  В качественном промышленном коде указателей не должно быть в принципе. Для хранения массивов данных необходимо использовать контейнеры.
                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                  0 пользователей:


                  Рейтинг@Mail.ru
                  [ Script execution time: 0,0331 ]   [ 18 queries used ]   [ Generated: 28.03.24, 13:57 GMT ]