Ошибки, баги, вопросы - страница 1637

 
Slawa:

1. Пятёрка или четвёрка? Предположу, что четвёрка. Просто увеличьте окно тестера.

2. Берёте и тестируете

Хаха, спасибо большое (мт4)
1366 х 768 (( на треть экрана надо вытянуть.
Скилл ясновиденья у Вас на уровне.

 
A100:

Возьмем попроще пример

Если формально подойти к вопросу - сколько вызовов вида A( A& ) ? Один. По крайней мере С++ не создает никаких промежуточных объектов

Возможно, в С++ RVO (return value optimization) по умолчанию стоит?
 
A100:

1. Двойной вызов конструктора копирования

2. Нет сообщения "leaked memory" (new без delete)

  1. Правильно сказано про оптимизацию RVO (есть ещё NRVO), на данный момент она отсутствует в компиляторе MQL, но в будущем будет добавлена (пока мы считаем эту оптимизацию неприоритетной задачей)
  2. не воспроизводится, пожалуйста перепроверьте, возможно Вы не указали важные детали для воспроизведения.
 
Ilyas: 2. не воспроизводится, пожалуйста перепроверьте, возможно Вы не указали важные детали для воспроизведения.

Упрощенный пример

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

Результат:

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

Вывод: деструктор не вызывается и одновременно нет сообщения об утечке памяти (как в следующем примере)

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

Результат:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 bytes of leaked memory
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 object of type A left
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 undeleted objects left
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Спасибо за пояснение. Воспроизвели - нет сообщения об утечке и вот почему:

Тут перестарался оптимизатор, т.к. нет операций с памятью или указателем, которые были созданы в операторе new, то аллокация этой памяти была удалена.

Мы подумаем над тем, стоит ли исправлять эту "фичу" оптимизатора или улучшить его, чтобы сохранение указателя в неиспользуемую переменную не блокировало удаление операции new.

 
День добрый.
Разработчики подскажите почему в MQL4 и MQL5 функция удаления подокна индикатора из эксперта есть, а функции создания окна индикатора нет.
Приходится подьзоватся шаблонами, либо запускать оконный идикатор в ручную, а это не удобно т.к. теряется информация нанесенная на график.
Да и хотелось бы иметь возможность запускать и отображать индикаторы из файла ресурсов.
Или подскажите как это организовать.
 
Slawa:

А это не Вы ли устраивали "лайфхак с визуализацией"?

С чего Вы решили, что это - баг? Название папки соответствует номеру порта, по которому произошло соединение

Это был я.... спасибо, понял.
 
Делаю макрос
#define MACROS(A) "##A##"
Хочется, чтобы MACROS(Num) заменялся на "Num", но получается всегда "##A##". Возможно ли определить макрос, чтобы получить желаемое?

 

Небольшое для себя открытие сделал

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Если открыть ордер по цене Integer * Point (без нормализации) и потом запросить цену открытия, то она будет отличаться от ненормализованного Integer * Point. 

Почему в OrderSEnd ВСЕГДА прокатывают ненормализованные цены вида Integer * Point?

 
fxsaber:
Делаю макросХочется, чтобы MACROS(Num) заменялся на "Num", но получается всегда "##A##". Возможно ли определить макрос, чтобы получить желаемое?

Уберите кавычки из тела макроса

Чтобы преобразовать параметр макроса в строку следует использовать #:

#define MACROS(A) #A
## используется для склеивания токенов
Причина обращения: