Комбинатор: Оверхед конечно будет, но если удобство важнее...
Спасибо! Получается, что return объекта и "=" при определении объекта идут через доп. конструктор.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
если вы что-то возвращаете по значению, оно будет присвоено через копи-конструктор (если тот же тип) если это определение или оператор если нет.
voidOnStart()
{
A a, b, c;
a.i = 2;
b.i = 3;
c.i = 5;
A d = a * b * c;
// код аналогичен A d(a * b * c);// будет вызван копи-конструктор.
A e;
e = a * b * c;
// будет вызван оператор =// но копи-конструктор все равно нужен для множественного умноженияPrint(d.i); // 30
}
Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. Такие объекты грохнут мою машину, т.к. предполагается работа с десятками миллионов тиков. Каждый объект будет отжирать гигабайты ОЗУ, и совсем не хочется иметь вот такие временные объекты вместо того, чтобы сразу их убивать.
У меня на новом графике только при повторном запуске пример заработал (все кнопки), что само по себе непонятно. Зато теперь понятно это
С открытием торгов указанный эффект (только при повторном запуске) пропал
Внесли правки в документацию. Проблема кода была в том, что отправка графику приказа на получение событий мыши является только постановкой команды в очередь графика. И если эта очередь не обрабатывается (например в выходные), то график не может принимать указанные события. В описание ChartSetInteger добавлено примечание и поправленный пример:
Примечание
Функция является асинхронной – это означает, что функция не дожидается выполнения команды, успешно поставленной в очередь указанного графика, а сразу же возвращает управление. Изменение свойства произойдет только после обработки команды в очереди графика. Для немедленного выполнения команд в очереди графика нужно вызвать функцию ChartRedraw.
Если требуется немедленно изменить сразу несколько свойств графика, то необходимо соответствующие функции (ChartSetString, ChartSetDouble, ChartSetString) выполнить в одном блоке кода и затем вызвать один раз ChartRedraw.
Для проверки результата выполнения можно использовать функцию, запрашивающую указанное свойство графика (ChartGetInteger, ChartGetDouble, ChartSetString). При этом необходимо иметь в виду, что данные функции являются синхронными и дожидаются результата выполнения.
Пример:
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ voidOnInit() { //--- включение сообщений о перемещении мыши по окну чарта ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1); //--- принудительное обновление свойств графика гарантирует готовность к обработке событий ChartRedraw(); }
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
Прошу помощи сделать простую вещь
Оверхед конечно будет, но если удобство важнее...
Спасибо! Получается, что return объекта и "=" при определении объекта идут через доп. конструктор.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
Хотелось бы на самом деле наглядную таблицу где-то посмотреть, в каких случаях идут вызовы конструкторов (и каких), а в каких - операторов. Сейчас все на уровне интуиции, а она сбоит, конечно.
если вы что-то возвращаете по значению, оно будет присвоено через копи-конструктор (если тот же тип) если это определение или оператор если нет.
если вы что-то возвращаете по значению, оно будет присвоено через копи-конструктор (если тот же тип) если это определение или оператор если нет.
Четко сформулировано, Спасибо!
ЗЫ Запринтовал Ваш код
Результат
Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати. Такие объекты грохнут мою машину, т.к. предполагается работа с десятками миллионов тиков. Каждый объект будет отжирать гигабайты ОЗУ, и совсем не хочется иметь вот такие временные объекты вместо того, чтобы сразу их убивать.
Выделенные строки вызывают вопросы. Почему временные объекты не грохнулись сразу, как были использованы? Т.е. до вывода тридцати.
обычно временные объекты удаляются не сразу, а в конце контекста. в С++ если не ошибаюсь это прямо в стандарте прописано.
хотите быстрого удаления - управляйте контекстом.
Правда придется сделать оператор =
У меня на новом графике только при повторном запуске пример заработал (все кнопки), что само по себе непонятно. Зато теперь понятно это
Внесли правки в документацию. Проблема кода была в том, что отправка графику приказа на получение событий мыши является только постановкой команды в очередь графика. И если эта очередь не обрабатывается (например в выходные), то график не может принимать указанные события. В описание ChartSetInteger добавлено примечание и поправленный пример:
Примечание
Функция является асинхронной – это означает, что функция не дожидается выполнения команды, успешно поставленной в очередь указанного графика, а сразу же возвращает управление. Изменение свойства произойдет только после обработки команды в очереди графика. Для немедленного выполнения команд в очереди графика нужно вызвать функцию ChartRedraw.
Если требуется немедленно изменить сразу несколько свойств графика, то необходимо соответствующие функции (ChartSetString, ChartSetDouble, ChartSetString) выполнить в одном блоке кода и затем вызвать один раз ChartRedraw.
Для проверки результата выполнения можно использовать функцию, запрашивающую указанное свойство графика (ChartGetInteger, ChartGetDouble, ChartSetString). При этом необходимо иметь в виду, что данные функции являются синхронными и дожидаются результата выполнения.
Пример:
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
void OnInit()
{
//--- включение сообщений о перемещении мыши по окну чарта
ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,1);
//--- принудительное обновление свойств графика гарантирует готовность к обработке событий
ChartRedraw();
}
обычно временные объекты удаляются не сразу, а в конце контекста. в С++ если не ошибаюсь это прямо в стандарте прописано.
хотите быстрого удаления - управляйте контекстом.
Правда придется сделать оператор =
Спасибо! В СД сообщили, что планируют исправить текущее поведение, но по срокам не определено.
Цветные линии (уровни) при предпросмотре (не печатал, но вероятно и на печати так) графика для печати в ЧБ.
Терминал Билд 1795
Windows 7 64
Если начать оптимизацию, а потом прервать ее спустя 30 минут, то терминал зависает, и его никак не остановить.
В диспетчере задач плодятся агенты MetaTester64(8шт).
После этого запустить терминал не удается. Надо ждать или перегружать компьютер.
у Всех так?