Как работают эти ссылки ? Зачем они ? Может кто нить на пальцах объяснить или показать пример ?
Да тут уже не раз объяснено - это элементы двусвязного списка. Каждый объект списка - указывает на следующий объект в списке, и на предыдущий объект.
Объявляешь объект CList. И пихаешь в него объекты CObject с помощью функции CList:: Add(). В этой функции каждый объект "цепляется" к имеющимся. После того, как ты все нужные объекты передал в CList - ты можешь запросить объекты (узлы) списка с помощью соответствующих функций. А получив один из объектов - сразу получить и следующий (или предыдущий), используя вот эти самые указатели.
Собственно сами указатели заполняются именно в функции CList::Add()
Лично я редко использую списки, мне больше нравится CArrayObj. Но, пару раз были задачи, для которых список был более удобен.
Да тут уже не раз объяснено - это элементы двусвязного списка. Каждый объект списка - указывает на следующий объект в списке, и на предыдущий объект.
Объявляешь объект CList. И пихаешь в него объекты CObject с помощью функции CList:: Add(). В этой функции каждый объект "цепляется" к имеющимся. После того, как ты все нужные объекты передал в CList - ты можешь запросить объекты (узлы) списка с помощью соответствующих функций. А получив один из объектов - сразу получить и следующий, используя вот эти самые указатели.
Собственно сами указатели заполняются именно в функции CList::Add()
Новая версия языка программирования торговых стратегий - MQL [MQL5] - имеет более эффективный и мощный инструментарий по сравнению с предыдущей [MQL4]. И это преимущество прежде всего относится к средствам объектно-ориентированного программирования. В данной статье рассматривается возможность использования такого пользовательского типа данных, относящегося к сложному, как узлы и списки. Приводится пример использования списков при программировании практических задач в MQL5.
Имхо, это не правильная концепция. Если пользователь захочет поместить один объект одновременно в несколько списков (почему бы и нет?), то выйдет облом...
Стесняюсь спросить, а откуда такая уверенность и безапелляционность? Кто мешает один и тот же объект поместить в разные списки?
Тогда на кой разработчик реализовал метод CList::Freemode(), не подскажите?
Для использования множественного нужны грамотные программисты, которых тут мало. Потому что можно такого наворотить..
Ой да ладно, можно подумать во всём остальном нельзя наворотить сдуру ) Да и главное чего такого страшного наворотить то. Я понимаю если бы речь шла о прямом доступе к памяти и прочих небезопасных вещах, а тут просто организация твоего кода - кого она волнует кроме тебя? )
Насколько я знаю, MQ уже давно начали разрабатывать множественное наследование. Год назад ещё мне в сервисдеске упоминали об этом. Но похоже дело заглохло. Хотелось бы у них разузнать, что да как, но они в последнее время молчат как партизаны
Стесняюсь спросить, а откуда такая уверенность и безапелляционность? Кто мешает один и тот же объект поместить в разные списки?
Тогда на кой разработчик реализовал метод CList::Freemode(), не подскажите?
Нет.
Один и тот же объект нельзя ставить в разные списки, потому, что связность списка определяется как раз цепочкой указателей Next-Previous в самих узлах списка. Если мы добавим узел в один список - то его указатели - будут указывать на узлы этого списка, но как только добавим этот же объект в другой список - его указатели будут переписаны в соответствии с этим новым списком, а информация о старом списке - потеряется.
FreeMode - это селектор метода удаления. Определяет, кто ведает удалением собственно самих объектов. То ли их будет удалять сам список, то ли пользователь.
К смарт-поинтерам у меня неоднозначное отношение - мне кажется, их использование оправдано весьма нечасто. А вот код они усложняют очень заметно. Поэтому, я сперва было хотел себе такой класс сделать, но, идея на уровне идеи и осталась...
Зря вы так. Без смартов приходится устраивать большие нагромождения кода в плане отслеживания перемещения указателей в различных контейнерах. Видимо вы просто не очень активно используете это.
Да, во многих случаях конечно можно обойтись и без всего этого, если у нас все объекты создаются и уничтожаются в одном месте. Но порой требуется и более гибкий функционал.
Я не понимаю этих вещей
Как работают эти ссылки ? Зачем они ? Может кто нить на пальцах объяснить или показать пример ?
Почти каждый кто заходил тему написал, что они используются для связывания объектов в списки.
Как работают эти ссылки ? Зачем они ? Может кто нить на пальцах объяснить или показать пример ?
Да тут уже не раз объяснено - это элементы двусвязного списка. Каждый объект списка - указывает на следующий объект в списке, и на предыдущий объект.
Объявляешь объект CList. И пихаешь в него объекты CObject с помощью функции CList:: Add(). В этой функции каждый объект "цепляется" к имеющимся. После того, как ты все нужные объекты передал в CList - ты можешь запросить объекты (узлы) списка с помощью соответствующих функций. А получив один из объектов - сразу получить и следующий (или предыдущий), используя вот эти самые указатели.
Собственно сами указатели заполняются именно в функции CList::Add()
Лично я редко использую списки, мне больше нравится CArrayObj. Но, пару раз были задачи, для которых список был более удобен.Да тут уже не раз объяснено - это элементы двусвязного списка. Каждый объект списка - указывает на следующий объект в списке, и на предыдущий объект.
Объявляешь объект CList. И пихаешь в него объекты CObject с помощью функции CList:: Add(). В этой функции каждый объект "цепляется" к имеющимся. После того, как ты все нужные объекты передал в CList - ты можешь запросить объекты (узлы) списка с помощью соответствующих функций. А получив один из объектов - сразу получить и следующий, используя вот эти самые указатели.
Собственно сами указатели заполняются именно в функции CList::Add()
Большое спасибо!
Владимир, посмотрите в Стандартную библиотеку, как используется CList.
Ещё кто-то писал статью про списки, не помню кто...
https://www.mql5.com/ru/articles/709
И, кстати, CObject используется не только в списках, но и других контейнерах, например CArrayObj.
Имхо, это не правильная концепция. Если пользователь захочет поместить один объект одновременно в несколько списков (почему бы и нет?), то выйдет облом...
Стесняюсь спросить, а откуда такая уверенность и безапелляционность? Кто мешает один и тот же объект поместить в разные списки?
Тогда на кой разработчик реализовал метод CList::Freemode(), не подскажите?
Fremode - для уничтожен объекта при удалении его из списка.
Смотрим метод Add:
Для использования множественного нужны грамотные программисты, которых тут мало. Потому что можно такого наворотить..
Стесняюсь спросить, а откуда такая уверенность и безапелляционность? Кто мешает один и тот же объект поместить в разные списки?
Тогда на кой разработчик реализовал метод CList::Freemode(), не подскажите?
Нет.
Один и тот же объект нельзя ставить в разные списки, потому, что связность списка определяется как раз цепочкой указателей Next-Previous в самих узлах списка. Если мы добавим узел в один список - то его указатели - будут указывать на узлы этого списка, но как только добавим этот же объект в другой список - его указатели будут переписаны в соответствии с этим новым списком, а информация о старом списке - потеряется.
FreeMode - это селектор метода удаления. Определяет, кто ведает удалением собственно самих объектов. То ли их будет удалять сам список, то ли пользователь.
К смарт-поинтерам у меня неоднозначное отношение - мне кажется, их использование оправдано весьма нечасто. А вот код они усложняют очень заметно. Поэтому, я сперва было хотел себе такой класс сделать, но, идея на уровне идеи и осталась...