Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2018, 01:48   #21
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от Avazart Посмотреть сообщение
Зачем обнулять ссылку?
Ну это то же банально:
1. Что бы можно было проверить существование объекта.
2. Что бы получить исключение при ошибочном обращении.
1. Проверка ссылки на nil не означает проверку "существования объекта". Ибо ссылка не принадлежит объекту. И как я уже говорил, ссылок на объект может быть более одной.
2. А вот это означает что в программе используются переменные, хранящие ссылки на объекты. И подразумевается, что эти переменные единственные, кто хранит данную ссылку. Но теперь другой вопрос/замечание. А кто присваивает этой переменной значение? Разве не Вы как создатель данной программы? И кто уничтожает объект, ссылку на который хранит эта переменная? Тоже не Вы?
А если всё делаете вы, то зачем вам проверять самого себя?
northener вне форума Ответить с цитированием
Старый 09.03.2018, 02:40   #22
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Avazart Посмотреть сообщение
Конкретно в каком учебнике?
Любой программист С++ Вам скажет что это не так.
Проверил. Да, действительно объект в NULL не устанавливается.

В общем, на сколько я понял, только FreeAndNil и никаких способов защиты не существует. Ну и ладно, учту.


Цитата:
Сообщение от min@y™ Посмотреть сообщение
Остаётся только процитировать классика и успокоиться
Ну если кто-то не понимает концепцию программирования и что у каждого философия и подход к кодингу могут быть свои (да и вообще кто-то может иметь свое мнение, в принципе) обзывает всех "говнокодерами" и еще не успокоился, то буду держать за него кулаки, дабы классик ему помог и он наконец действительно успокоился...
Сайт о программировании и трехмерной графике - cybersite.ucoz.net
cyberdev вне форума Ответить с цитированием
Старый 09.03.2018, 02:45   #23
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от cyberdev Посмотреть сообщение
обзывает всех "говнокодерами"
А-ну забери свои слова назад.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2018, 02:57   #24
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от cyberdev Посмотреть сообщение
В общем, на сколько я понял, только FreeAndNil и никаких способов защиты не существует.
Вы всё поняли неправильно!
А ещё точнее вы ничего не смогли понять по причине недостатка базовых знаний.
northener вне форума Ответить с цитированием
Старый 09.03.2018, 02:57   #25
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Остаётся только процитировать классика и успокоиться
Цитата:
Сообщение от min@y™ Посмотреть сообщение
Цитата:
Сообщение от cyberdev
обзывает всех "говнокодерами"
Цитата:
Сообщение от min@y™ Посмотреть сообщение
А-ну забери свои слова назад.
Да, действительно, даже классик не помог и это таки на долго :-)

Цитата:
Сообщение от min@y™;
А вообще - за затыкание EAccessViolation между except и end надо отрубать руки и бить ими говнокодера прямо в нос.
Это были не мои слова!

Цитата:
Сообщение от northener Посмотреть сообщение
Вы всё поняли неправильно!
А ещё точнее вы ничего не смогли понять по причине недостатка базовых знаний.
Нет. Цель данной темы найти способ защиты от неправильного удаления объекта. Вот и всё.
Сайт о программировании и трехмерной графике - cybersite.ucoz.net

Последний раз редактировалось cyberdev; 09.03.2018 в 03:02.
cyberdev вне форума Ответить с цитированием
Старый 09.03.2018, 03:01   #26
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от cyberdev Посмотреть сообщение
Это были не мои слова!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 09.03.2018, 03:11   #27
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Ну елки палки. И не лень же делать из мухи слона... :-) Еще цвет и такой подобрать... Это была цитата из вашего сообщения, если кто не понял!

Браво! :-)

Классик таки о вас сказал. Предположение подтвердилось.
Сайт о программировании и трехмерной графике - cybersite.ucoz.net

Последний раз редактировалось cyberdev; 09.03.2018 в 03:16.
cyberdev вне форума Ответить с цитированием
Старый 09.03.2018, 03:33   #28
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
вы ничего не смогли понять по причине недостатка базовых знаний
Я ничего не понимаю, потому как не являюсь разработчиком языков программирования Delphi и C++. Но вы то тут профессиональный программист? Возможно даже разработчик языков программирования Delphi и C++, кто знает... :-) Тогда может быть, объясните мне, почему разработчики сделали такой механизм? Что послужило причиной сделать так, что объекты могут не обнуляться после удаления (это же потенциальная причина ошибки(!))?

Если кто не понял, в сообщении присутствует доля юмора :-) Но вопрос актуален!
Сайт о программировании и трехмерной графике - cybersite.ucoz.net

Последний раз редактировалось cyberdev; 09.03.2018 в 03:46.
cyberdev вне форума Ответить с цитированием
Старый 09.03.2018, 12:44   #29
Avazart
Форумчанин
 
Аватар для Avazart
 
Регистрация: 13.08.2011
Сообщений: 184
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
1. Проверка ссылки на nil не означает проверку "существования объекта". Ибо ссылка не принадлежит объекту. И как я уже говорил, ссылок на объект может быть более одной.
При правильном коде ссылка одна в указанном мною случае.
Когда несколько ссылок это уже другая ситуация, для этого в С++ есть шаред поинтеры.
Т.е объект подсчитывающий кол-во ссылок на объект и удаляющий объект только если счетчик достигает 0

Цитата:
Сообщение от cyberdev Посмотреть сообщение
Тогда может быть, объясните мне, почему разработчики сделали такой механизм? Что послужило причиной сделать так, что объекты могут не обнуляться после удаления (это же потенциальная причина ошибки(!))?
Что значит "обнуляться" в Вашем понимании?
Записывать в в ячейки где хранился объект нули ?
Это потенциальная лишняя работа...
Которая никому не нужна.
При удалении область памяти становится "незанятой" и может быть отдана под другой объект, при создании которого старые данные в этой области просто перепишутся на новые, без ненужного "обнуления".

Ссылка/указатель же лишь объект хранящий адрес(число) по которому расположен(или был расположен) объект.

Последний раз редактировалось Alex11223; 09.03.2018 в 13:02.
Avazart вне форума Ответить с цитированием
Старый 09.03.2018, 20:57   #30
cyberdev
Форумчанин
 
Аватар для cyberdev
 
Регистрация: 10.10.2013
Сообщений: 150
По умолчанию

Цитата:
Сообщение от Avazart Посмотреть сообщение
Это потенциальная лишняя работа...
Ну это уже в зависимости от ситуации, когда нужно обнулять оставшиеся указатели, а когда и необязательно, например, при удалении главного окна программы, когда любые указатели уже использоваться не будут. Во время же работы программы такая необходимость есть потому как можно перепутать, по запарке существующий объект с уже удаленным. Ну да ладно, методы борьбы с данным недостатком всем известны.

Теперь мне интересно другое. Меня тут обвинили в незнании и всё такое... Скажу, что это нормально чего-то не знать, тем более на форуме. Иначе, теряется смысл обращения на него за ответом :-) Так вот, хочу спросить прежде всего у тех, кто считает себя умнее других, показывает пальцем и говорит, ты не знаешь, сего, того и всё такое... Почему разработчики языков Делфи и C++ сделали такой механизм, чтобы ссылка не обнулялась?
Сайт о программировании и трехмерной графике - cybersite.ucoz.net

Последний раз редактировалось cyberdev; 09.03.2018 в 20:59.
cyberdev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверить существование объекта cyberdev Общие вопросы Delphi 23 06.03.2018 19:56
JSON проверить существование значения Dozent Общие вопросы Delphi 2 07.04.2015 18:16
Проверить существование значения в TStringList Shouldercannon Общие вопросы Delphi 4 20.01.2013 15:03
Проверить существование папки Stepan575 Visual C++ 4 17.12.2010 19:02