Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
1-1091792491
Aldor_
2004-08-06 15:41
2004.08.22
Передача строк в/из функции dll


14-1091710708
Ш-К
2004-08-05 16:58
2004.08.22
Пишу макрос


1-1091655066
yozh_programmer
2004-08-05 01:31
2004.08.22
Компонент для отчета с диаграммой и сохр. в WORDформате


6-1087837598
leonidus
2004-06-21 21:06
2004.08.22
Парсер на основе IE


3-1091118297
cherrex
2004-07-29 20:24
2004.08.22
IBDataSet





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский