Ошибки, баги, вопросы - страница 2471
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Обьясните почему при создании CChartObjectLabel у меня не удаляются обекты в индикаторе при деинициализации в таком коде:
при переключении ТФ получаю запись в журнале: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 objects of type CChartObjectLabel left
если раскомментировать в OnInit() создание текстовых меток ( CChartObjectLabel ), то все будет корректно работать
в ф-цию CreateLabel() передаю указатель, а удалить его потом в OnDeinit() почему то не удается
Создаётся новый объект l. И он-то не удаляется.
логично
но область видимости переменных CChartObjectLabel *LabelUP,*LabelDN; у меня глобальная?
значит я могу в любом участке кода произвести модификацию переменой ?
я передаю в ф-цию CreateLabel() указатель, почему у меня создается новая копия?
имхо, не корректно все это работает
ЗЫ: если создать обьекты в OnInit() и затем произвести работу с ними в CreateLabel() (т.е. создаю обьекты отдельно, а работаю с ними по указателю) то все будет работать корректно - но не припомню случая в других компиляторах чтобы передача указателя в ф-цию создавала новый объект - указатель он и в Африке указатель!
логично
но область видимости переменных у меня глобальная? - значит я могу в любом участке кода произвести модификацию переменой ?
я передаю в ф-цию CreateLabel() указатель, почему у меня создается новая копия?
имхо, не корректно все это работает
логично
но область видимости переменных CChartObjectLabel *LabelUP,*LabelDN; у меня глобальная?
значит я могу в любом участке кода произвести модификацию переменой ?
я передаю в ф-цию CreateLabel() указатель, почему у меня создается новая копия?
имхо, не корректно все это работает
Переназначая указатель на новый объект, теряем предыдущий объект, на который указывал переназначенный указатель .
нет, указатель это указатель, в MQL он дескриптор, не суть - но новую копию обьекта создавать не корректно это, вот так сейчас работает корректно:
но если следовать твоей логике, то и в этом коде будет создана копия обьекта l в ф-ции SetLabel() - я же указатель передал, а не ссылку?
new надо убирать. Объекты же есть уже, и указатели на них.
вопрос не как решить проблему, а почему при глобальной области видимости переменной CChartObjectLabel *LabelUP,*LabelDN; - потерялся указатель!
нет, указатель это указатель, в MQL он дескриптор, не суть - но новую копию обьекта создавать не корректно это, вот так сейчас работает корректно:
но если следовать твоей логике, то и в этом коде будет создана копия обьекта l в ф-ции SetLabel() - я же указатель передал, а не ссылку?
Нет. Здесь l - параметр метода, через который передаем нужный указатель. Здесь всё хорошо. Здесь указатель остаётся на ранее созданный объект. Тут же нет создания нового объекта и переназначение указателя на него с потерей прошлого объекта.
все равно не корректно все работает
вот эти "указатели" в MQL заточены под работу в области видимости класса, я не хочу создавать класс, беру и объявляю в глобальной видимости указатель, затем передаю его в любую ф-цию и то что в этой ф-ции я создаю дескриптор обьекта не есть повод уничтожать обьект при выходе из локальной видимости ф-ции
сейчас немного занят, но нужно тестовые примеры без графики сделать - думаю такая же беда будет, что если вошел в ф-цию с указателем со значением POINTER_INVALID, то и выйдешь с таким же POINTER_INVALID , по ссылке да, все будет работать корректно, но вроде по ссылке нельзя передать указатель с POINTER_INVALID - будет ошибка обращения к указателю
все равно не корректно все работает
вот эти "указатели" в MQL заточены под работу в области видимости класса, я не хочу создавать класс, буру и объявляю в глобальной видимости указатель, затем передаю его в любую ф-цию и то что в этой ф-ции я создаю дескриптор обьекта не есть повод уничтожать обьект при выходе из локальной видимости ф-ции
сейчас немного занят, но нужно тестовые примеры без графики сделать - думаю такая же беда будет, что если вошел в ф-цию с указателем со значением POINTER_INVALID, то и выйдешь с таким же POINTER_INVALID , по ссылке да, все будет работать корректно, но вроде по ссылке нельзя передать указатель с POINTER_INVALID - будет ошибка обращения к указателю
С удивлением обнаружил возможность объявления typedef с указателем на шаблонную функцию.
Однако счастье не оказалось долгим.
typedef с указателем на шаблонную функцию является ли запланированным к использованию функционалом?
При работе с typedef использование шаблонной функции с явной специализацией не вызывает генерацию кода этой шаблонной