Массив указателей и массив самих объектов, в чем преимущество/недостатки первого и второго способа?
Во втором способе если надо то тоже можно получить указатель на объект с помощью GetPointer()
Если у тебя массив объектов, то для того, чтобы удалить элемент из массива, надо в самом объекте оператор = перегружать, чтобы arr[i]=arr[i+1] сделать, а это потенциальный баг (тупо добавил поле, а в оперторе = не добавил его копирование), да и каждый раз накладно создавать новые объекты.
В массиве указателей такой проблемы нет, но запросто можно не уследить и получить утечку памяти.
Я для себя связанный список реализовал. В стандартной библиотеке тоже такой вроде есть.
Если у тебя массив объектов, то для того, чтобы удалить элемент из массива, надо в самом объекте оператор = перегружать, чтобы arr[i]=arr[i+1] сделать
Про оператор не понял
arr[i]=arr[i+1] объект не получится так скопировать?
Про оператор не понял
arr[i]=arr[i+1] объект не получится так скопировать?
Массив указателей и массив самих объектов, в чем преимущество/недостатки первого и второго способа?
Во втором способе если надо то тоже можно получить указатель на объект с помощью GetPointer()
По мне - так особой разницы нет. В случае массива указателей - надо несколько больше действий по созданию и удалению объектов.
Обычно использую массив указателей, поскольку в этом случае в массиве могут быть нулевые указатели. В случае массива объектов так не выйдет.
По мне - так особой разницы нет. В случае массива указателей - надо несколько больше действий по созданию и удалению объектов.
Обычно использую массив указателей, поскольку в этом случае в массиве могут быть нулевые указатели. В случае массива объектов так не
выйдет.
В случае массива объектов тебе придется физически сдвигать все объекты при удалении или добавлении одного в середине. Ужос.
В случае массива объектов тебе придется физически сдвигать все объекты при удалении или добавлении одного в середине. Ужос.
Вот-вот. Сначала новый копируются поля из старого в новый, и так до конца массива, потом "убивается" последний элемент массива. А это все такты,
такты, много тактов процессора.
Еще момент. Есть массив из N объектов и ты хочешь добавить еще один. Вроде ничего особенного, но может случиться следующее. Не занятой памяти после конца массива (вы же знаете, что элементы массива идут в памяти друг за другом?) не хватает для очередного элемента, соответственно что происходит? Менеджер памяти ищет новый свободный участок в куче для размещения массива и, после этого копирует на новое место весь массив освобождая предыдущее. Опять время.
Поэтому массивы объектов в mql ну не смотрится совершенно, только указателей. Тут уже, даже если не заморачиваться с реализациями а-ля
std::vector или std::list, накладных расходов всяко меньше.
Вот-вот. Сначала новый объект аллоцируется, потом копируются поля из старого в новый, потом "убивается" старый. А это все такты, такты,
много тактов процессора.
Ага, вывод для ТС: лучше с указателями.
В случае массива объектов тебе придется физически сдвигать все объекты при удалении или добавлении одного в середине. Ужос.
используйте списки CList, вот я себе шаблон на основе CList сделал - можно хранить любые обьекты, минимум модификации https://www.mql5.com/ru/forum/85652/page16
используйте списки CList, вот я себе шаблон на основе CList сделал - можно хранить любые обьекты, минимум модификации https://www.mql5.com/ru/forum/85652/page16
А ты сравни скорость доступа к элементу Clist со скоростью доступа к элементу массива )) Может, я помешан на скорости, это есть такое, но медленнее на порядок или более.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Массив указателей и массив самих объектов, в чем преимущество/недостатки первого и второго способа?
Во втором способе если надо то тоже можно получить указатель на объект с помощью GetPointer()