Форум: "Потрепаться";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Вниз
Delphi + pointer = ? Найти похожие ветки
← →
Anatoly Podgoretsky © (2004-08-04 16:11) [160]UK (04.08.04 16:02) [157]
А работу Free будешь сам выполнять? А зачем?
← →
UK (2004-08-04 16:20) [161]>Anatoly Podgoretsky © (04.08.04 16:11) [160]
Не понял, какая такая работа в данном коде требуется от Free?
with TMyObject.Create do
try
...
finally
Free
end;
Что Self <> nil? Так по-другому здесь и быть не может. Вы о чем?
>Мастер © (04.08.04 16:06) [159]
>Достаточно, это означает правильно
Да.
>и так нужно делать?
Так можно делать и никогда ни к каким ошибкам это не приведет.
← →
Anatoly Podgoretsky © (2004-08-04 16:23) [162]А в другом месте, без анонимной ссылкой?
← →
Мастер © (2004-08-04 16:30) [163]> UK (04.08.04 16:20) [161]
Ну что же...
Все на борьбу с лишними командами!
Будем вычленять из VCL необходимо-достаточные куски кода, и, в соответствии с ситуацией, использовать только их.
← →
Sandman25 © (2004-08-04 16:33) [164][163] Мастер © (04.08.04 16:30)
И что в этом плохого? В том, что код понимается, а не бездумно используется.
← →
UK (2004-08-04 16:42) [165]>Anatoly Podgoretsky © (04.08.04 16:23) [162]
При чем здесь другое место, когда речь шла о вполне конкретном примере?
>Мастер © (04.08.04 16:30) [163]
Ну если больше нечем заняться, то боритесь. Или это способ вести дискуссию, когда по существу сказать уже нечего?
Я что-то не понял... Я что, сказал что-то неправильно? Что именно? В чем меня пытаются обвинить? Или здесь теперь так принято?
← →
Мастер © (2004-08-04 16:43) [166]>Sandman25 © (04.08.04 16:33) [164]
> И что в этом плохого? В том, что код понимается, а не бездумно
> используется.
А плохое то, что, даже если ты понял, что происходит в код VCL, не факт, что не допустишь ошибки. Также может изменииться код VCL при смене версии.
А в данном случае непонятна цель использования Destroy вместо Free.
Уменьшение кода на 5 байт? - Смешно, если учесть, что Destroy безопасно можно использовать только в приведенном примере.
← →
Sandman25 © (2004-08-04 16:45) [167][166] Мастер © (04.08.04 16:43)
А давайте не будем inherited вызывать, вдруг код изменится при смене VCL.
← →
Мастер © (2004-08-04 16:47) [168]>Sandman25 © (04.08.04 16:45) [167]
Это предложение кочевряжить внутреннюю структуру классов?
inherited как раз и предназначено для того, чтобы правильно использвать методы предка.
← →
Sandman25 © (2004-08-04 16:48) [169][168] Мастер © (04.08.04 16:47)
Free как раз и предназначено, чтобы правильно вызывать Destroy. И ни для чего больше.
← →
Мастер © (2004-08-04 16:50) [170]>Sandman25 © (04.08.04 16:48) [169]
> Free как раз и предназначено, чтобы правильно вызывать Destroy.
> И ни для чего больше.
Ну тогда о чем спорим?
Вызываем Free, чтобы правильно выполнилось Destroy.
← →
Sandman25 © (2004-08-04 16:52) [171][170] Мастер © (04.08.04 16:50)
procedure ProcessIfNotZero(I: byte);
begin
if I <> 0 then
Process(I);
end;
...
I := 1;
ProcessIfNotZero(I);
Вопрос. Почему бы не вызвать Process(I), если код ProcessIfNotYero никогда не изменится?
← →
Мастер © (2004-08-04 16:57) [172]>Sandman25 © (04.08.04 16:52) [171]
> Вопрос. Почему бы не вызвать Process(I), если код ProcessIfNotYero
> никогда не изменится?
Потому, что используя в десятках мест Process(I), в конце концов получишь AV(в лучшем случае), упустив место, где I изменится(А приведенный пример вообще некорректен, так как не зависит от внешних условий).
Такой стиль программирования - не лучший.
← →
UK (2004-08-04 17:00) [173]>Мастер © (04.08.04 16:47) [166]
С чего все началось:
Например, существует вот такая часто используемая конструкция:
with TMyObject.Create do
try
...
finally
Free
end;
И как здесь уничтожит объект, если нет Free, а есть только FreeAndNil? Что передавать в параметре?
Я высказал свое скромное мнение(Имхо), что ЭТОТ пример неудачен для обоснования необходимости наличия метода Free по таким-то причинах.
Как продолжилось:
Мастер © (04.08.04 15:52) [155]
>UK (04.08.04 15:42) [151]
И чем же пример неудачен?
Я повторил, чем же именно этот пример неудачен в ДАННОМ случае.
Уважаемый, Вы вообще-то нить отслеживаете? При чем здесь борьба, куски VCL и прочие ужасы? Вы о чем вообще? Или так, для самоутверждения?
← →
Sandman25 © (2004-08-04 17:02) [174][172] Мастер © (04.08.04 16:57)
А если я полностью контролирую свою программу и ничего не упущу? :)
Кстати, я всегда пишу по привычке Free, но если подумать, то применение Destroy вместо Free может сделать код более читабельным. Да, да! Как комментарий о том, что имеем дело с локальной переменной, которая нигде больше не используется.
← →
Sandman25 © (2004-08-04 17:03) [175]И которая точно не равна nil.
← →
Мастер © (2004-08-04 17:04) [176]>UK (04.08.04 17:00) [173]
При чем здесь борьба, куски VCL и прочие ужасы? Вы о чем вообще? Или так, для самоутверждения?
Для чего вообще здесь было указано, что можно использовать Destroy? Для самоутверждения?
Ведь в контексте разговора совершенно не имеет значения, Destroy или Free используется. Смысл был в том, что невозможно использовать FreeAndNil в такой конструкции.
В результате это абсолютно ненужное, и даже вредное замечание увело дискуссию в сторону.
← →
Sandman25 © (2004-08-04 17:05) [177][176] Мастер © (04.08.04 17:04)
Правильно, даешь процедуру DestroyAndNil!
← →
Мастер © (2004-08-04 17:07) [178]>Sandman25 © (04.08.04 17:02) [174]
> применение Destroy вместо Free может сделать код более читабельным
А вот это субъективное утверждение.
А если я полностью контролирую свою программу и ничего не упущу? :)
А если для корректировки объемной программы нужно будет вернуться к коду через полгода-год?
Ведь здесь дело в стиле, этот пример слишком прост, чтобы в нем можно было допустить ошибки.
← →
Sandman25 © (2004-08-04 17:10) [179][178] Мастер © (04.08.04 17:07)
Если пример сложнее, то используется Free :)
← →
UK (2004-08-04 17:11) [180]>Мастер © (04.08.04 17:04) [176]
>абсолютно ненужное, и даже вредное замечание.
А, понял. Врага народа нашли, хватай его - и на Соловки!
К ВАМ у меня больше вопросов нет, позвольте откланяться. Позвольте на прощание совет - потренируйте на досуге формальную логику, у Вас с ней проблемы.
← →
Мастер © (2004-08-04 17:12) [181]>UK (04.08.04 17:11) [180]
ага-)
Вот он каков - Ваш метод ведения дискуссии - демагогия.
← →
Мастер © (2004-08-04 17:15) [182]> Sandman25 © (04.08.04 17:10) [179]
> Если пример сложнее, то используется Free :)
К чему и вернулись;-)
← →
Sandman25 © (2004-08-04 17:17) [183][182] Мастер © (04.08.04 17:15)
Конечно, вернулись. Но, надеюсь, иногда Вы осмелитесь написать Destroy вместо Free :)
← →
Мастер © (2004-08-04 17:19) [184]>Sandman25 © (04.08.04 17:17) [183]
Конечно, вернулись. Но, надеюсь, иногда Вы осмелитесь написать Destroy вместо Free :)
Так не вижу смысла в этом.
для меня намного привычней и наглядней написать Free - так, как это я использую везде в программе. А задумываться еще и о том, можно ли в данном конкретном случае сэкономить одну команду - только время терять при разработке.
← →
Anatoly Podgoretsky © (2004-08-04 17:19) [185]Мастер © (04.08.04 17:04) [176]
Особо не увело, свою роль тоже сыграло.
← →
Sandman25 © (2004-08-04 17:20) [186][184] Мастер © (04.08.04 17:19)
С последней частью согласен.
← →
Igorek © (2004-08-04 17:38) [187]
> Игорь Шевченко © (04.08.04 16:04) [158]
> > Все обращения к классу идут из классов, связанных таким
> > образом. Потому не может быть обращения извне и потому
> битых
> > ссылок.
> А без таких вот строк кода разве нельзя сделать программу,
> в которой не будет битых ссылок ? От кого тогда защищаться-то
> ?
Что за манера - вопросом на вопрос.
Ты спросил - "как защищает?". Я пояснил. Не забывай, что в начале я написал "это пример". Могут быть и другие способы - с другими строками кода.
Просто именно такой код (или измененный, если есть список ссылок) позволяет:
- разрывать связь с любой стороны и даже извне
- будучи вызванным в деструкторе автоматом обрежет связи на класс, что разрушается
Что в конечном итоге делает невозможным битые ссылки. И делает это легко - т.е. раз написал связь - и ни о чем не беспокоишься.
← →
NailMan © (2004-08-04 18:44) [188]Anatoly Podgoretsky ©
> Проверка переменной на нил говорит о попытке повторного
> использования этой переменной, в правильно написаной программе
> этого быть не должно, говорит о недостатках дизайна, подлежит
> переписыванию.
Не соглашусь. Предположим у меня есть массив чего-то, скажем массив текстур которые сделаны в виде класса.
Я загрузил в начале программы кучу текстур, и по прошествии какого-то времени мне стала не нужна какая-то текстура в массиве.
Я ее Free-кнул, тобишь убил.
Далее прошло еще какое-то врем и я решил загрузить текстуру, которой в массиве нет еще и чтобы не расширять массив я хочу найти свободный указатель.
Я буду проверять if Texture[i]<>nil then я создам ее и буду юзать дальше.
Другими словами я найду первый свободный элемент и займу его, но не буду расширять сам массив добавляя ему в конец новый экземпляр.
Ну и как тут передизайнить по правильному?
---
WBR, NailMan aka 2:5020/3337.13
← →
wicked © (2004-08-04 18:48) [189]
> Ну и как тут передизайнить по правильному?
к
> Я ее Free-кнул, тобишь убил.
нужно добавить - "и об-nil-ил"....
и всех делов... тем более, что класс-контейнер сам должен инкапсулировать такие вещи...
← →
Igorek © (2004-08-04 19:22) [190]
> Другими словами я найду первый свободный элемент и займу
> его, но не буду расширять сам массив добавляя ему в конец
> новый экземпляр.
> Ну и как тут передизайнить по правильному?
связный список тебе поможет
← →
Anatoly Podgoretsky © (2004-08-04 19:57) [191]NailMan © (04.08.04 18:44) [188]
TList/TObjectList
← →
Anatoly Podgoretsky © (2004-08-04 19:58) [192]Поиск элемента (переменной) и есть попытка повторного использования, ведет к ошибкам.
← →
cyborg © (2004-08-04 20:29) [193]
> [153] Digitman © (04.08.04 15:51)
> это ты к чему ? откуда у этого ноги растут ?
Это я к первому сообщению, хотел сказать "ты программист или где?", но потом написал это, так понятнее :). Если человеку лень обнулять указатели это не значит что их не нужно обнулять. Напиши в конце концов процедуру, которая освобождает и обнуляет, но его это почему-то вымораживает. Пошёл бы он скворечник сострогал чтоли, тут птицам размножаться негде :).
Страницы: 1 2 3 4 5 вся ветка
Форум: "Потрепаться";
Текущий архив: 2004.08.22;
Скачать: [xml.tar.bz2];
Память: 0.79 MB
Время: 0.064 c