Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
ВнизСтатья на хабаре про Делфи «создание и уничтожение объектов...» Найти похожие ветки
← →
jack128_ (2009-10-23 09:56) [40]
> Кстати, у меня не бывает AV. Удивись.
А. Ну тогда конечно.
Кста, а зачем тут: http://delphimaster.net/view/3-1239773025/ в восьмом посте ты вызвал: DBParams.Free; а не DBParams.Destroy ?
> Все зависит где будет объект в кучи.
"объект в куче" расположен по адресу nil, потому что я строчкой выше вызвал FreeAndNil.
← →
Ухарь (2009-10-23 10:02) [41]
> @!!ex © (23.10.09 00:13) [22]
>
> > [16] jack128_ (23.10.09 00:02)
>
> Как надо говнокодить, чтобы обращаться к удаленному объекту?
> ?
А ты можешь себе представить ситуацию, когда один и тот же объект находится сразу в нескольких списках?
← →
oxffff © (2009-10-23 10:04) [42]
> > Все зависит где будет объект в кучи.
>
> "объект в куче" расположен по адресу nil, потому что я строчкой
> выше вызвал FreeAndNil.
Ты говорим о разных вещах.
← →
jack128_ (2009-10-23 10:07) [43]
> А ты можешь себе представить ситуацию, когда один и тот
> же объект находится сразу в нескольких списках?
в этом случае FreeAndNil не поможет.
← →
oxffff © (2009-10-23 10:09) [44]
> Ты говорим
:)
Мы говорим.
← →
Alkid © (2009-10-23 10:27) [45]
> GDI+ (22.10.09 22:54) [2]
А я на C++ предпочитаю использовать std::auto_ptr и не париться с удалением объекта в деструкторе.
← →
Anatoly Podgoretsky © (2009-10-23 14:01) [46]
> oxffff © (23.10.09 10:09) [44]
До чего Интернет доводит, уже боимся множественное число применять.
Не знаю будет ли защитан мой голос, но я никогда FreeAndNil не использовал. Я считаю это вредным изобретением и понятно откуда уши растут.
← →
@!!ex © (2009-10-23 14:03) [47]> [41] Ухарь (23.10.09 10:02)
Могу. У меня есть отдельный список форм текущем проекте.
Этот список удалением не занимаеться, поскольку формы удаляются в другом месте.
Опять же, это вопрос архитектуры.
Как вариант - научить объект удалять себя из списков куда он помещен.
← →
Leonid Troyanovsky © (2009-10-23 14:10) [48]
> @!!ex © (23.10.09 14:03) [47]
> Могу. У меня есть отдельный список форм текущем проекте.
See also Screen.Forms.
> Как вариант - научить объект удалять себя из списков
Notification forever!
--
Regards, LVT.
← →
@!!ex © (2009-10-23 14:13) [49]> [48] Leonid Troyanovsky © (23.10.09 14:10)
> See also Screen.Forms.
О чем я и говорю. Есть Screen.Forms и есть дополнительно мой список. Так что я вполне представляю ситуацию в которой объект может существовать в нескольких списках.
> [48] Leonid Troyanovsky © (23.10.09 14:10)
> Notification forever!
Вот и я о том же.
← →
GDI+ (2009-10-23 18:01) [50]
> Alkid © (23.10.09 10:27) [45]
>
>
> > GDI+ (22.10.09 22:54) [2]
>
> А я на C++ предпочитаю использовать std::auto_ptr и не париться
> с удалением объекта в деструкторе.
Хм, а он разве потокобезопасный? Хотя это от реализации stl зависит. Так что я предпочитаю сам проверить чем потом искать баги. Их и так хватает тех же системных. Вот в Windows7 Gdi+ сломали, теперь она глючит при использовании интерполяции NearestNeighbour и CopyMode при отрисовке графического объекта.
← →
Ухарь (2009-10-23 18:18) [51]
>@!!ex ©
> Бывает. Но я не могу припомнить случая, чтобы эти AV были
> вызваны удаленным объектом, к которому идет обращение.
>
> P.S. Сейчас 90% AV из-за обращения по нулевому адресу. :
> )
Какая то принципиальная разница между обращением к удаленному объекту, и обращением к еще не созданному объекту есть?
как то странно получается - в первом случае значит "говнокод", а во втором все допустимо?
← →
Leonid Troyanovsky © (2009-10-23 18:29) [52]
> Ухарь (23.10.09 18:18) [51]
> Какая то принципиальная разница между обращением к удаленному
> объекту, и обращением к еще не созданному объекту есть?
Разницы, дейс-но, нет. На 90% лечится путем if Assigned(x) then.
Ведь, IMHO, вопрос сводился к валидности хранимых ссылок?
Другими словами: для дезавуирования инвалидных ссылок
на интересующий объект хранителю оных достаточно получить
уведомление о разрушении оного объекта.
--
Regards, LVT.
← →
@!!ex © (2009-10-23 19:19) [53]> [51] Ухарь (23.10.09 18:18)
У меня нет обращения к еще не созданным объектам.
На данный момент AV бывает в двух слячаях:
1) Кривые скрипты - 98% на этом вываливается. Думали вставить проверки, но ни сильно убивают скорость, решили пока не трогать.
2) 1% Обращение к модели, которой физически на диске не существует. Давно зочу исправить, все из головы вылетает... Вот, кстати, сейчас и пойду исправлю.
Ну и оставшийся процент - это банальные косяки в коде, к счастью бывает очень редко.
← →
Ухарь (2009-10-23 19:42) [54]
> @!!ex ©
> У меня нет обращения к еще не созданным объектам.
> На данный момент AV бывает в двух слячаях:
Если AV идет по нулевому адресу, то в любому случае это обращение либо к убитому, либо к нерожденному. И что там именно - объект с т. зр паскаля, структура, или что-то третье, пусть не делфийское - принципиально не важно.
> Leonid Troyanovsky © (23.10.09 18:29) [52]
> Ведь, IMHO, вопрос сводился к валидности хранимых ссылок?
Честно говоря, потерял нить - о чем вопрос. Я в данном случае спорю с утверждением "если у вас обращение к уже разрушенному объекту, то у вас говнокод"
А по FreeAndNil имхо ответ очевиден - где надо - там используем, где не надо - там не используем
← →
@!!ex © (2009-10-23 19:47) [55]> [54] Ухарь (23.10.09 19:42)
Нет. Обращение к объекту которого нет в принципе. Он не создан и не может быть создан.
Просто скриптер передает туда значение от балды. прога валится. Проверять смысла нет, потому что не штатная ситуация и в процессе работы возникнуть не может.
> [54] Ухарь (23.10.09 19:42)
> Я в данном случае спорю с утверждением "если у вас обращение
> к уже разрушенному объекту, то у вас говнокод"
Ошибки в коде приводящие к этому - это может быть и не в говнокоде.
Говнокод это в том случае, если мы это дело маскируем как было показано в [2]. Потому что такое не максировать надо, а убирать нафиг.
← →
Ухарь (2009-10-23 19:59) [56]
> @!!ex © (23.10.09 19:47) [55]
.
> Говнокод это в том случае, если мы это дело маскируем как
> было показано в [2].
Маскировать то конечно ничего не надо. НО обниливание ссылки приведет скорее к выявлению ошибки, чем к ее маскировке. Потому что при обращении по адресу, где раньше был объект, AV можно и не получить. А именно двойное разрушение - случай более редкий, чем просто обращение к разрушенному, его частный случай.
Насколько я понимаю, в [2] показан полный аналог TObject.Free;
Это тоже маскировка ошибок?
← →
Kolan © (2009-10-23 20:22) [57]
> Потребитель может не знать о существовании других объектов
> и о пуле в частности. Они например могут использоваться
> другимим потребителями.
Если потребитель не знает, то знает сам объект, тогда опять получаем что-то вроде:Object[I].ParentObjectList.Clear();
А если другими объектами пользуются, то надо делать систему уведомлений, пример в VCL.
А есть реальный пример, почему-то есть подозрение, что плохой дизайн во многом виноват...
← →
GDI+ (2009-10-23 22:10) [58]@!!ex © (23.10.09 19:47) [55]
> [54] Ухарь (23.10.09 19:42)
Ошибки в коде приводящие к этому - это может быть и не в говнокоде.
Говнокод это в том случае, если мы это дело маскируем как было показано в [2]. Потому что такое не максировать надо, а убирать нафиг.
Нуу... лично я такое не маскирую, но библиотеки мои используют люди с различным уровнем квалификации.
Например было, когда человек работал с VCL моими компонентами из нескольких потоков без синхронайзе, причем в компонентах не предусматривалась вытуренный thread safe, так как были рассчитаны на работу в основном потоке.
Так вот, в результате оно даже не очень глючило(при такой ГЛОБАЛЬНОЙ ошибке) и относительно нормально работало.
PS
Во к примеру как вам больше нравится такая обработка ошибок как в Сталкере ЧН(когда при любой ошибке валится игра и отравляется отчёт в поддержку) или тихий глюк как в Обливионе, где при возникновении ошибки может быть просто невозможно пройти один из многочисленных квестов.
PS
Сейчас стандартом похоже стало не работоспособная не смотря не на что программа, а окошко с гламурными кнопочками сигнализирующее падение программы и предлагающее отправить отчёт разработчику. Но многие программисты забывают что ПО это не изделие, а услуга, если она станет не удовлетворять бизнес-модели, пользователь найдёт другую услугу(ПО).
← →
@!!ex © (2009-10-23 22:14) [59]> [58] GDI+ (23.10.09 22:10)
Сталкер свалится, ты загрузишься и дальше играть продолжишь.
А тот же Обливион может тебе все запороть, а ты узнаешь об этом после того как уже все сейвы будут дохлые....
Я за первый вариант.
Вообще, если прога после возбуждения исключения может продолжать работать, это надо явно указывать.
А работать с прогой, которая авось дальше норм будет, ну нафиг такой софт...
← →
@!!ex © (2009-10-23 22:25) [60]Сейчас мода не на приложения с красивыми окошками, а на быстрый выброс на рынок не тестированного софта.
По поводу продолжения работы после ошибок:
У левелдизайнеров, которые работают сейчас со мной над проектом прямое указание: в случае возникновения ошибки в редакторе, даже если после ошибки редактор дальше нормально работает, перезапускать редактор БЕЗ сохранения работы.
Потому что Эксцепшн - это уже выход системы в нештатоное состояние. AV в частности - это кривой указатель. Что может натворит ькривой указатель вы и без меня знаете.
Это примерно как машина у которой заклинил ГУР. Можно дальше ехать, но в кювет улететь можно без проблем. Всяко лучше остановится и тех помощь вызвать.
Опять же скрытая ошибка так и будет скрытой. А явная, позволит пользователю отправить мессагу в саппорт.
ОДно дело игра, которая через 10 часов будет навсегда с компа удалена. и на ошибки в ней всем плевать.
А другое дело нормальный софт... если в нем будут скрытые ошибки, замаскированные... ну лично я такой софт быстро удалю.
← →
GDI+ (2009-10-23 22:33) [61]>>@!!ex © (23.10.09 22:14) [59]
>>> [58] GDI+ (23.10.09 22:10)
>>Сталкер свалится, ты загрузишься и дальше играть продолжишь.
то-то с техподдержкой сталкера игроки матом разговаривали от такого сервиса.
>>А тот же Обливион может тебе все запороть, а ты узнаешь об этом после того как уже все сейвы будут дохлые....
консоль:
resurrect
placeatpc
На форумах обливиона давали простое быстрое решение данных стандартных багов. В том числе и от официальной техподдержки.
← →
GDI+ (2009-10-23 22:35) [62]
> @!!ex © (23.10.09 22:25) [60]
> А другое дело нормальный софт... если в нем будут скрытые
> ошибки, замаскированные... ну лично я такой софт быстро
> удалю.
Удаляйте Windows, ставьте linux, там именно такая модель.
← →
@!!ex © (2009-10-23 22:42) [63]> [61] GDI+ (23.10.09 22:33)
> то-то с техподдержкой сталкера игроки матом разговаривали
> от такого сервиса.
Это проблемы отдельных представителей бизнеса.
> [62] GDI+ (23.10.09 22:35)
> Удаляйте Windows, ставьте linux, там именно такая модель.
Меня и под виндой все устраивает.
← →
GDI+ (2009-10-23 22:58) [64]
> @!!ex © (23.10.09 22:25) [60]
> У левелдизайнеров, которые работают сейчас со мной над проектом
> прямое указание: в случае возникновения ошибки в редакторе,
> даже если после ошибки редактор дальше нормально работает,
> перезапускать редактор БЕЗ сохранения работы.
ЗЫ
Кстати у вас все ошибки логируются или нет, или как потом разработчик может исследовать ошибку?
Используют ваши гейм-дизайнеры svn/cvs?
← →
@!!ex © (2009-10-23 22:59) [65]> [64] GDI+ (23.10.09 22:58)
SVN мы используем. Логируется конечно. Исключения не логируются, они просто шоты делают.
Но эксцепшены это редкость к счастью.
← →
GDI+ (2009-10-23 23:00) [66]>>@!!ex © (23.10.09 22:42) [63]
>>Это проблемы отдельных представителей бизнеса.
Которые перейдут на более "стабильный" аналог вашего ПО и знакомым предложат перейти.
PS
При разработке программ я более учитываю психологию пользователя, чем всяки рекомендации по разработке, так как деньги платят не адепты разработки, а конечные пользователи.
По поводу редактора - использование любой из систем контроля версий дало бы большую безопасность данных чем ваша рекомендация.
← →
GDI+ (2009-10-23 23:05) [67]
> @!!ex © (23.10.09 22:59) [65]
Ну у нас есть свой логгер на обрабатываемые исключения и Еврикалог на необрабатываемые.
При возникновении исключения более важное - сохранить как можно более полную информацию о нем, чем всё остальное.
> @!!ex © (23.10.09 22:59) [65]
> SVN мы используем. Логируется конечно. Исключения не логируются,
> они просто шоты делают.
Попробуйте заставить не пользователей внутреннего ПО а внешних заставить делать скриншоты.
xxx: тааак, вы исправили ошибку?
yyy: Если честно, то мы везде по несколько раз проверяли и не нашли.
xxx: прога не работает, а вы проблему не нашли? это 3.14здец какой-та! мля фсё, утоплю всех фкровииии!!!
yyy: Вышлите скриншоты ошибок, мы определим причину, если скриншоты будут информативные.
xxx: я тебе скриншот своего голого ануса щас пришлю
yyy: Проблема предположительно именно в нём?
← →
@!!ex © (2009-10-23 23:09) [68]> [66] GDI+ (23.10.09 23:00)
> По поводу редактора - использование любой из систем контроля
> версий дало бы большую безопасность данных чем ваша рекомендация.
Одно другое не исключает.
> [67] GDI+ (23.10.09 23:05)
> Попробуйте заставить не пользователей внутреннего ПО а внешних
> заставить делать скриншоты.
Зачем заставлять? Это автоматом делается. :D
Вы мне сейчас что сказать хотите? Что исключения надо сохранять и сообщать о них? Я с этим и не спорил.
Я спорл с тем, что софт должен продолжаться работать замалчивая исключения.
← →
GDI+ (2009-10-24 00:00) [69]
> @!!ex © (23.10.09 23:09) [68]
> Зачем заставлять? Это автоматом делается. :D
>
> Вы мне сейчас что сказать хотите? Что исключения надо сохранять
> и сообщать о них? Я с этим и не спорил.
> Я спорл с тем, что софт должен продолжаться работать замалчивая
> исключения.
Если исключение прогнозируемо и обрабатывается то об этом максимум нужно залогировать его и уведомить пользователя. А далее продолжать работать с программой/уведомить техподдержку/прекратить работать с программой - это сознательный выбор пользователя. Если произошла ошибка, о которой было сообщено, но пользователь её проигнорировал это дело пользователя.
То же самое как из-за ошибок в javascript сайтов я не хотел бы падения бровзера или надоедливого модального сообщения об этом.
← →
@!!ex © (2009-10-24 00:03) [70]> [69] GDI+ (24.10.09 00:00)
С этим я тоже спорить не буду.
Я буду спорить с тем что использование:if (NULL != obj){
delete obj;
obj = NULL;
}
Во всех деструкторах как штатный код это нормально.
Это не нормально.
← →
@!!ex © (2009-10-24 00:03) [71]Ну и с тем что Обливион действует правильно игнорируя ошибки. С этим я тоже спорить буду.
← →
GDI+ (2009-10-24 02:52) [72]
> @!!ex © (24.10.09 00:03) [71]
>
> Ну и с тем что Обливион действует правильно игнорируя ошибки.
> С этим я тоже спорить буду.
Ну и спорьте. Обливион пока Top1 в RPG от первого лица. Они могут себе позволить сами устанавливать правила.
← →
@!!ex © (2009-10-24 08:59) [73]> [72] GDI+ (24.10.09 02:52)
А Microsoft Top1 в операционных системах. И как же мы. простые программисты смеем указывать им на ошибки! Это же MICROSOFT!
;)
← →
GDI+ (2009-10-25 02:43) [74]
> @!!ex © (24.10.09 08:59) [73]
>
> > [72] GDI+ (24.10.09 02:52)
>
> А Microsoft Top1 в операционных системах. И как же мы. простые
> программисты смеем указывать им на ошибки! Это же MICROSOFT!
Укажите на конкретные ошибки в архитектуре ОС от Microsoft.
Здесь мы говорим не ошибках вообще, а об архитектурных ошибках.
← →
Игорь Шевченко © (2009-10-25 02:53) [75]
> Укажите на конкретные ошибки в архитектуре ОС от Microsoft.
ОС от Microsoft, кстати, при ошибке ломается мгновенно и навсегда (в смысле, до перезагрузки). И сделано это намерено.
← →
GDI+ (2009-10-25 03:11) [76]
> Игорь Шевченко © (25.10.09 02:53) [75]
> ОС от Microsoft, кстати, при ошибке ломается мгновенно и
> навсегда (в смысле, до перезагрузки). И сделано это намерено.
При ошибке в Kernel mode.
С одной стороны это хорошо, так как у обычных "активных" пользователей которые использую несколько десятков программ Windows более полугода не живёт. А цена за её переустановку позволяет кормить десятки фирм "компьютерной скорой помощи".
← →
Игорь Шевченко © (2009-10-25 11:40) [77]GDI+ (25.10.09 03:11) [76]
> С одной стороны это хорошо, так как у обычных "активных"
> пользователей которые использую несколько десятков программ
> Windows более полугода не живёт.
Я-то думал, я с серьезным человеком разговариваю.
← →
Игорь Шевченко © (2009-10-25 11:44) [78]GDI+ (25.10.09 03:11) [76]
Что-то я смотрю, знакомое...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.12.27;
Скачать: [xml.tar.bz2];
Память: 0.64 MB
Время: 0.008 c