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

    Сделать метод clone() - задача непосильная для дельфиста.
    Цитата DesweR @
    или хотя бы отличать те экземпляры, которые можно копировать, от тех, которые нельзя копировать (концептов пока нет)

    Я когда-нибудь не выдержу и во всей красоте матерного русского выскажу всё, что я думаю о вас, г. DesweR.
    Вот при чём тут концепты? Почему нельзя определить, что копируется, а что - нет? Откуда вы вообще изволили взять весь этот бред? Короче, отсыпете, а?
      Цитата MyNameIsIgor @
      Сделать метод clone() - задача непосильная для дельфиста.

      Как раз для нас не проблема унаследоваться от TPersistent, входящему в стандартную RTL, и переопределить AssignTo :)

      Цитата MyNameIsIgor @
      Вот при чём тут концепты?

      Про концепты говорил D_KEY, n-ое кол-во страниц назад.

      Добавлено
      Цитата MyNameIsIgor @
      Почему нельзя определить, что копируется, а что - нет?

      Без понятия, как в С++ установить это обобщённо и для классов и для других типов?
        Цитата DesweR @
        Про концепты говорил D_KEY, n-ое кол-во страниц назад.

        И что, что он говорил про концепты? Как это относится к запрету конструктора копирования и оператора присваивания для полиморфных классов?
        Цитата DesweR @
        Без понятия, как в С++ установить это обобщённо и для классов и для других типов?

        Что "это"? Если разработчик копирование запретил - его нет. Разрешил - есть. Что тут "устанавливать" то?
          Цитата MyNameIsIgor @
          Как это относится к запрету конструктора копирования

          Причём тут конструктор копирования? Забудь про него, он не работает для классов с иерархией наследования (т.е. срабатывает только для последнего в иерархии).

          Цитата MyNameIsIgor @
          Если разработчик копирование запретил - его нет. Разрешил - есть. Что тут "устанавливать" то?

          Без конструкторов копирования, как будешь определять копируемый или не копируемый экземпляр класса?
          Сообщение отредактировано: DesweR -
            Цитата DesweR @
            Причём тут конструктор копирования? Забудь про него, он не работает для классов с иерархией наследования (т.е. срабатывает только для последнего в иерархии).

            Цитата DesweR @
            Без конструкторов копирования, как будешь определять копируемый или не копируемый экземпляр класса?

            :wall: Если нет конструктора копирования и оператора присваивания, то и скопировать не получится.
              Цитата MyNameIsIgor @
              :wall: Если нет конструктора копирования и оператора присваивания, то и скопировать не получится.

              Да даже если он и есть - скопировать целиком не получится, т.к. конструкторы копирования предков не вызываются :wall:
                Цитата DesweR @
                Да даже если он и есть - скопировать целиком не получится, т.к. конструкторы копирования предков не вызываются

                Да тот, кто их сделает для полиморфных классов и никоим образом не позаботится о проблеме срезки, пойдёт за ворота. Этот человек не знает C++.
                И вообще-то не предков, а потомков, ага. Скопировать предков то как раз можно.
                Сообщение отредактировано: MyNameIsIgor -
                  Цитата DesweR @
                  Цитата D_KEY @
                  допустимо ли и нужно ли разделение на неявные ссылочные и не ссылочные типы.

                  Допустимо и нужно, вот к примеру строковый тип в Delphi - string, он имеет счетчик ссылок и автоматически увеличивает размер памяти под себя, переменная этого типа представляет собой указатель на значение, хранящиеся в динамической памяти.

                  То есть переменная будет указателем на область памяти, которая хранит лишь счетчик ссылок и указатель на динамические данные? Или как?
                  Зачем? В С++ тип std::string может также хранить указатель на динамически выделенную память для строки и размер этих данных.
                  Он точно также расширяется сам и может использовать CoW.

                  Цитата
                  эффективная работа со строками, при копировании строки - копируется только указатель, при изменении строки - создаётся отдельная копия;
                  Это никак не связано с ссылочным типом. Это вопрос внутренней реализации класса string. Ты описываешь обычный CoW, который, кстати, в условиях многопоточности не так эффективен, как кажется.

                  Цитата
                  нет необходимости вручную управлять памятью, она автоматически изменяется под размер строки;

                  Опять же, это никак не связано с ссылочными типами. std::string ведет себя так же.

                  Цитата
                  не подвержен эксплойтам на переполнении стека, т.к. значение хранится в динамической памяти.

                  Опять же, это никак не связано с ссылочными типами. std::string ведет себя так же.


                  Цитата
                  Ещё примеры: динамические массивы, интерфейсы, анонимные методы, классы

                  И примером чего это все является?
                  Кстати, речь о размещении вообще не идет.

                  Цитата
                  (тут уже холиварили, а пока С++ не научится корректно копировать их экземпляры (копирующие конструкторы для классов с иерархией наследования не подходят) или хотя бы отличать те экземпляры, которые можно копировать, от тех, которые нельзя копировать (концептов пока нет), то разговаривать не о чем).

                  Совершенно бессмысленный вброс. Единственное, о чем тут можно говорить, так это об организации "стандартного" виртуального конструктора копирования, причем в стиле С++(например, без обязательного размещения в динамической памяти). Что-то вроде того, что предлагал Mastrerkent в соседнем холиваре:
                  Цитата Masterkent
                  ExpandedWrap disabled
                    Base &base = derived;
                    Base *p_copy_1 = new virtual Base(base);
                    virtual Base copy_2(*this);


                  Добавлено
                  korvin, решил не отвечать :) ?
                    DesweR, есть кусочек кода (схематично).
                    ExpandedWrap disabled
                       VAR str : STRING; { Надеюсь, я правильно понял имя типа }
                       
                       FUNCTION func(VAR Ch:Char):Boolean;
                       BEGIN
                        Ch   := Succ(Ch);
                        func := Ch <> Chr(255)
                       END;
                       
                      BEGIN
                        str := 'It''s some string';
                        FOR i:=1 TO Length(str) DO func(str[i])
                      END.
                    Задача переписать на Дельфи, и (опционально) перенести func под многопоточность. Давай заценим эффективность ленивого копирования под параядерником.

                    P.S. Насколько мне известно, практические исследования показали бесполезность ленивого копирования вкупе с возможностью индексирования отдельных элементов для не-только-чтения. Оверхед в точках индексирования и синхронизация слизывают весь выигрышь. В частных случаях имеют место отклонения в обе стороны. Ссылок пока не могу дать, вечером попробую погуглить. Если кто владеет инфой, этой или противоположной, милости прошу.
                    Сообщение отредактировано: Qraizer -
                      Qraizer, string в Delphi реентерабелен.
                        И вообще, DesweR, ты походу просто попутал понятия. Ссылочный тип - это одно, а внутренняя его реализация - это совсем другое. Пусть он хранит ссылки на данные, счётчик использования и не копирует контент без нужды. Если он при этом обладает прозрачной семантикой значения, он уже не ссылочный.

                        Добавлено
                        Romkin, не сомневаюсь. Вопрос был в эффективности ленивого копирования с его сложностью реализации по сравнению с простым хранением значения безо всяких распальцовок.
                          ExpandedWrap disabled
                            #include<iostream>
                             
                            class Base
                            {
                            public:
                                virtual void Method(){std::cout<<"Base";}
                            };
                             
                            class Derive:public Base
                            {
                            public:
                                void Method(){std::cout<<"Derive";}
                            };
                             
                            void Func(Base b)
                            {
                                b.Method();
                            }
                             
                            int main()
                            {
                                Derive d;
                                Func(d);
                            }

                          Выводит Base. А как же полиморфизм ? :blush:
                            IL_Agent, от тебя ну никак не ожидал.
                            Сто раз обсуждали. Это некорректный код.
                            Требуешь создание нового объекта конкретного типа - какой тут полиморфизм?
                            Ничего не сделал, чтобы предотвратить срез(конструирование объекта базового класса из объекта производного) - какой ты программист?
                            Сообщение отредактировано: D_KEY -
                              Цитата D_KEY @
                              IL_Agent, от тебя ну никак не ожидал.
                              Сто раз обсуждали. Это некорректный код.
                              Требуешь создание нового объекта конкретного типа - какой тут полиморфизм?
                              Ничего не сделал, чтобы предотвратить срез(конструирование объекта базового класса из объекта производного) - какой ты программист?

                              В C# нельзя делать структуры (типы значений) базовыми или производными типами других классов или структур. Хотя они неявно наследуются от класса ValueType. Поэтому такой код в принципе не написать (ну, по крайней мере я не знаю как :D ).
                              Сообщение отредактировано: Red -
                                Цитата D_KEY @
                                IL_Agent, от тебя ну никак не ожидал.
                                Сто раз обсуждали. Это некорректный код.
                                Требуешь создание нового объекта конкретного типа - какой тут полиморфизм?
                                Ничего не сделал, чтобы предотвратить срез(конструирование объекта базового класса из объекта производного) - какой ты программист?

                                это некорректный язык. и как после этого можно C++ называть объектно-ориентированным?
                                =)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (495) « Первая ... 176 177 [178] 179 180 ...  494 495


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