Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.08.22;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.82 MB
Время: 0.045 c
1-1091624200
race1
2004-08-04 16:56
2004.08.22
guid


3-1091281147
Wolfram
2004-07-31 17:39
2004.08.22
Какие сложности могут возникнуть при работе с Power Builder 9.0


14-1091655831
Knight
2004-08-05 01:43
2004.08.22
Программа "Исполнитель"...


3-1090994118
DART VAIDER
2004-07-28 09:55
2004.08.22
Импортировать БД из Excel


1-1091721922
mouse_web
2004-08-05 20:05
2004.08.22
Как узнать разрешение экрана