Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Бинго!
Да не совсем бинго. Для простых объектов работает присваивание оператором =. Не баг точно.
...
Нет. Когда в автоматик из динамик - это не указатель присваивается, а выполняется копирование объекта - значений его полей, но только с простыми объектами.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MQL5 Компилятор не различает класс и указатель на него
SemenTalonov, 2019.01.10 04:18
С каких времен определены (вопрос разработчикам)
и как они работают? Следующий компилируемый код выглядит бредово
И здесь ситуация не ясна
Да не совсем бинго. Для простых объектов работает присваивание оператором =. Не баг точно.
Вот-вот, это самый главный момент.
Лично я считаю, что нельзя использовать оператор присваивания для объектов, если этот оператор не определен явно, даже если объекты простые. Еще как-то можно согласиться на присваивание простых структур. Но классы, в которых обязательно вызывается конструктор (как минимум, неявно) - присваиваться могут только явно определенными операторами.
На мой взгляд, это было сделано для упрощения жизни новичкам.
Вот-вот, это самый главный момент.
Лично я считаю, что нельзя использовать оператор присваивания для объектов, если этот оператор не определен явно, даже если объекты простые. Еще как-то можно согласиться на присваивание простых структур. Но классы, в которых обязательно вызывается конструктор (как минимум, неявно) - присваиваться могут только явно определенными операторами.
На мой взгляд, это было сделано для упрощения жизни новичкам.
И сложные удобны - без этого нельзя вернуть MqlTradeRequest, например. И в структурах также обязательно вызывается конструктор.
Есть версия что MQL это такой очень обрезанный C#. Исходя из этого, становится понятно поведение MQL компилятора в данном случае. Ведь в C# классы всегда размещаются в куче, следовательно:
Теперь разберемся с массивом m_A. Раз m_A массив классов, а классы размещаются всегда в куче, следовательно нет необходимости указывать является ли массив m_A массивом указателей или массивом самих объектов, т.к. для классов всегда работает только первый вариант. Раз m_A всегда массив указателей, то в MQL сделана поблажка: в нем можно не указывать хранит ли он ссылочные типы или значимые. Следовательно A* m_A[2] == A m_A[2]. Аминь.
Есть версия что MQL это такой очень обрезанный C#. Исходя из этого, становится понятно поведение MQL компилятора в данном случае. Ведь в C# классы всегда размещаются в куче, следовательно:
Теперь разберемся с массивом m_A. Раз m_A массив классов, а классы размещаются всегда в куче, следовательно нет необходимости указывать является ли массив m_A массивом указателей или массивом самих объектов, т.к. для классов всегда работает только первый вариант. Раз m_A всегда массив указателей, то в MQL сделана поблажка: в нем можно не указывать хранит ли он ссылочные типы или значимые. Следовательно A* m_A[2] == A m_A[2]. Аминь.
Неверный вывод. m_A - массив объектов, а не указателей. И эти объекты полностью уничтожаются. Не уничтожается new A.
Неверный вывод. m_A - массив объектов, а не указателей. И эти объекты полностью уничтожаются. Не уничтожается new A.
Хороший пример. Хм. Тогда будем думать дальше.
пхах)) я вообще в шоке с этого
пхах)) я вообще в шоке с этого
А что не так? В одном случае объект, в другом случае указатель.