![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
да дескриптор, не идентификатор как написал
но чем отличаются вызовы методов в этом коде ?
Ничем.
В MQL дескриптор очень часто ведёт себя как объект. То есть, автоматически разыменовывается.
В строке
A *c = GetPointer(a);
фактически берётся не дескриптор указателя, а дескриптор объекта, на который он указывает.
В C++ пришлось бы писать так:
A *c = GetPointer(*a);
Ничем.
В MQL дескриптор очень часто ведёт себя как объект. То есть, автоматически разыменовывается.
В строке
фактически берётся не дескриптор указателя, а дескриптор объекта, на который он указывает.
В C++ пришлось бы писать так:
ОК, теперь понял!
Спасибо!
да дескриптор, не идентификатор как написал
но чем отличаются вызовы методов в этом коде ?
А зачем ты один и тот же объект три раза удаляешь?)))
В плюсах - это неопределенное поведение, здесь, сильно надеюсь, что разработчики учли шаловливые ручки (но лучше не испытывать судьбу). Кстати, в дебаг-режиме он тебе в логах ругнется.
еще вопрос, если позволите )
Это из стандартной библиотеки
зачем тогда *element в параметрах метода и ниже CheckPointer, если &element уже получит указатель (дескриптор) ?
Нижний кусок получается эквивалентным верхнему, так?
еще вопрос, если позволите )
Это из стандартной библиотеки
зачем тогда *element в параметрах метода и ниже CheckPointer, если &element уже получит указатель (дескриптор) ?
Нижний кусок получается эквивалентным верхнему, так?
Они не эквивалентны и оба не правильны.
Правильно так:
Они не эквивалентны и оба не правильны.
Правильно так:
по телу метода вопросов нет, по сигнатуре есть
чем,
отличается от
?
во втором случае, & берет указатель от element, а что делает * в первом?
по телу метода вопросов нет, по сигнатуре есть
чем,
отличается от
?
во втором случае, & берет указатель от element, а что делает * в первом?
В первом случае в функцию приходит указатель, во втором случае ссылка.
Здесь & обозначает не операцию взятия адреса, а тип аргумента - ссылка.
по телу метода вопросов нет, по сигнатуре есть
чем,
отличается от
?
во втором случае, & берет указатель от element, а что делает * в первом?
В первом случае ты передаешь дескриптор на объект, при этом определяешь его (объект) const. А во втором случае - не указатель, а ссылка. Если во втором случае, ты передашь в метод ссылку на невалидный объект, то у тебя все в run-time упадет. Поэтому в СБ, правильно.
А вот теперь тонкость, которую кодер либы не учел, а на код-ревью проглядели, хотя может и так задумано было. В первом случае, учитывая передачу дескриптора в другие методы, безопаснее: