На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (495) « Первая ... 471 472 [473] 474 475 ...  494 495  ( Перейти к последнему сообщению )  
> Delphi vs C++ vs C# , ну и Java немножко, где-то ближе к старшему байту номеров страниц
    Цитата Shaggy @
    хм...

    :blink:? а... это, Destroy - это деструктор в Делфи, да? :rolleyes: И в Делфи можно в теле деструктора указывать путем inherited; порядок вызова родительского? Ппц :wacko:
    Спасибо кнечно, и ничего против не имею, но мне б и так не подошло - т.к. дочерний класс я писал не на Делфи.

    Добавлено
    Shaggy, все равно не понял. Зачем мне после inherited; удалять свое, если сам факт вызова inherited вызовет родительский деструктор в котором вызовется Clear в котором свое уже и так потрется?
      Цитата Shaggy @
      Цитата Chow @
      "хорошо" что это был VCL-ный класс у которого есть ComponentState

      хм...
      ExpandedWrap disabled
        destructor TMyObj.Destroy;
        begin
          inherited;
          // удаляем своё
        end;

      Как я понял, в деструкторе базового класса вызывается виртуальный метод Clear(), в котором ты уже очистишь свое. Но об этом вызове нужно знать или заводить флажки - очистили мы свое или нет :)
      В любом случае - каша и никакого разделения между классами иерархии
        Мляаааааа... Как это всё мило :jokingly:
          А слабо чистить так, чтобы даже повторный вызов работал правильно? Тогда и флаги не нужны
            Цитата Chow @
            Зачем мне после inherited; удалять свое, если сам факт вызова inherited вызовет родительский деструктор в котором вызовется Clear в котором свое уже и так потрется?

            1. на примере:
            твоё поле - список
            тогда в clear - list.clear
            в деструкторе - list.free;

            2. если же ты в clear именно удаляешь поле, то это надо делать так:
            anyobj.free;
            anyobj:=nil
            или
            freeandnil(anyobj);

            а иначе(если ты не заnilивашь ссылку) ССЗБ, тебе не кажется?
              D_KEY, как бы фабрика выглядела на сях?
                Цитата --Ins-- @
                А слабо чистить так, чтобы даже повторный вызов работал правильно?

                кстати, да
                два clear подряд и av - замечательно
                  Цитата --Ins-- @
                  D_KEY, как бы фабрика выглядела на сях?

                  На сях? Тяжко.
                  На С++ правда тоже не слишком красиво - нужно ручками регистрировать нужные типы, если хотим получать объекты по имени класса, например.

                  Добавлено
                  Цитата Shaggy @
                  ССЗБ, тебе не кажется?

                  Ну так сначала создали проблему в языке, а вы теперь ее героически преодолеваете.
                    Цитата D_KEY @
                    Ну так сначала создали проблему в языке

                    это уже просто упрямство :)
                    решение т.н. "проблемы" не займёт и строчки кода
                    поле всё равно удаляем, так напиши freeandnil(obj) вместо obj.free
                    и всё, с деструктором шаманить не придётся
                      Цитата Shaggy @
                      поле всё равно удаляем

                      Зачем это делать руками :blink: ? Неудобно ведь и забыть можно...
                        Цитата --Ins-- @
                        А на самом деле там очень гибкий процесс конструирования с возможностью программиста вмешиваться в различные этапы и элегантно реализовывать многие сложные вещи
                        А зачем вмешиваться во что-то кем-то написанное на разных этапах, если в результате всё получим кастомное? Не проще ли в этом случае кастомно сразу и написать? Эффективнее будет работать, и платить не придётся, если не юзаем.
                          Цитата D_KEY @
                          Зачем это делать руками ? Неудобно ведь и забыть можно...

                          мы всё ещё про пример Chow, да? :)

                          метод clear(не деструктор), удаление поля
                          как это можно сделать "не руками"?
                            Цитата D_KEY @
                            На С++ правда тоже не слишком красиво - нужно ручками регистрировать нужные типы, если хотим получать объекты по имени класса, например.


                            А ты говоришь, зачем нужно, зачем нужно... Чтобы не было тяжко, вестимо. Человеческий мозг и время - слишком ценный ресурс, чтобы тратить его на то, что можно автоматизировать

                            Цитата D_KEY @
                            В любом случае - каша и никакого разделения между классами иерархии


                            Это лютый бред, и он не выдерживает никакой критики. Точно так же можно заявить, что виртуальные методы в принципе создают кашу и отсутствие разделения между классами в иерархии. Ведь возможна гипотетическая ситуация, что ты перекрываешь виртуальный метод так, что он, будучи использованным в базовом классе который писал не ты, приведет к чему-то неожиданному и непредвиденному. Кто тебя знает, как тебе вздумается его перекрыть? И ты ведь не обязан знять реализацию базового класса. Вывод - надо запретить вызов виртуальных методов в базовом классе :wall:
                            Еще раз: это полная хня. Единственная причина, почему в с++, Java, шарпе и т.д. пишут что не нужно вызывать вирт. методы в конструкторах - потому что там ты в случае чего не сможешь эту ситуацию разрулить. А в Delphi - сможешь, поэтому все сишные аргументы тут неприменимы
                            Сообщение отредактировано: --Ins-- -
                              Цитата Shaggy @
                              поле всё равно удаляем, так напиши freeandnil(obj) вместо obj.free

                              :lool: Многие Дельфисты даже помешались на этом FreeAndNil настолько, что используют даже для _локальных_ объектов, вроде:

                              ExpandedWrap disabled
                                var
                                  MyObj: TMyClass;
                                begin
                                  MyObj := TMyClass.Create;
                                  try
                                    // do something with MyObj
                                  finally
                                    FreeAndNil(MyObj);
                                  end
                                end;


                              Спрашиваешь: зачем? Отвечают: мол, чтобы привыкнуть и в случае реальной необходимости не забыть :lool:

                              Добавлено
                              Цитата --Ins-- @
                              Еще раз: это полная хня. Единственная причина, почему в с++, Java, шарпе и т.д. пишут что не нужно вызывать вирт. методы в конструкторах - потому что там ты в случае чего не сможешь эту ситуацию разрулить. А в Delphi - сможешь, поэтому все сишные аргументы тут неприменимы

                              Работал я когда-то над проектом, ядро для которого разрабатывал другой программист. Проект использовал табулированный интерфейс и ОЧЕНЬ часто вылетал при закрытии вкладок. А все из-за того что освобождение содержимого вкладки делалось в... BeforeDestruction! :crazy: Вот посмотришь на такие примеры, и понимаешь, что не дураки все-таки Джаву разрабатывали :rolleyes: Там таких проблем не может быть априори.
                                Цитата [S]mike @
                                Работал я когда-то над проектом, ядро для которого разрабатывал другой программист. Проект использовал табулированный интерфейс и ОЧЕНЬ часто вылетал при закрытии вкладок. А все из-за того что освобождение содержимого вкладки делалось в... BeforeDestruction!


                                Ну дурак разработчик, Delphi то причем? Чьи-то кривые руки не делают инструмент, которые они держат, кривым. Я тебе могу привести примеры элегантного использования того же BeforeDestruction
                                Сообщение отредактировано: --Ins-- -
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 471 472 [473] 474 475 ...  494 495


                                Рейтинг@Mail.ru
                                [ Script execution time: 0.5953 ]   [ 15 queries used ]   [ Generated: 28.07.26, 20:38 GMT ]