Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Указатель можно и не по ссылке передавать - без &.
то меняется указатель именно тот, который создан на стеке, соответственно, при "размотке" стека получаем утечку памяти. Так делать конечно не хорошо, но если человеку хочется...
поведение указателей на классы в MQL не предсказуемое, кто то из админов когда то писал, что все классы создаются в глобальной памяти (выделение памяти), Вы пишете, что указатели на классы в локальной видимости создаются в стеке (имхо, так и должно быть!)
хотя возможно я путаю что то , может быть займусь проверю - в теории не сложно проверить, достаточно в деструкторе тестового класса прописать Print(), деструкторы должны автоматически вызываться при выходе из локальной зоны видимости...
Можно. Только если передать указатель без &, то на стеке создается новый указатель, которому присваивается переданное значение. При этом, если мы выделяем в функции память по этому указателю, то меняется указатель именно тот, который создан на стеке, соответственно, при "размотке" стека получаем утечку памяти. Так делать конечно не хорошо, но если человеку хочется...
Не будет никакой утечки. Потому что в функции никто ничего не выделяет для этого указателя.
поведение указателей на классы в MQL не предсказуемое, кто то из админов когда то писал, что все классы создаются в глобальной памяти (выделение памяти), Вы пишете, что указатели на классы в локальной видимости создаются в стеке (имхо, так и должно быть!)
хотя возможно я путаю что то , может быть займусь проверю - в теории не сложно проверить, достаточно в деструкторе тестового класса прописать Print(), деструкторы должны автоматически вызываться при выходе из локальной зоны видимости...
Если память выделяется динамически (new), то она выделяется в куче, а если вы создаете объект на стеке (CObj obj;), то и память ему выделяется тоже на стеке.
Не будет никакой утечки. Потому что в функции никто ничего не выделяет для этого указателя.
Классическая утечка. Указателю созданному на стеке и инициализированному при создании значением, переданным в функцию, присвоили новое значение и он стал указателем на новый объект. После чего указатель благополучно был убит при раскрутке стека. Что и требовалось доказать. Вот как раз тут и должно быть:
Если память выделяется динамически (new), то она выделяется в куче, а если вы создаете объект на стеке (CObj obj;), то и память ему выделяется тоже на стеке.
В mql такого нет - (CObj obj;)
Классическая утечка. Указателю созданному на стеке и инициализированному при создании значением, переданным в функцию, присвоили новое значение и он стал указателем на новый объект. После чего указатель благополучно был убит при раскрутке стека. Что и требовалось доказать. Вот как раз тут и должно быть:
Божий дар с яичницей не путайте. Тем более идиотский код писать для подтверждения ошибочного заявления...
В mql такого нет - (CObj obj;)
Классическая утечка. Указателю созданному на стеке и инициализированному при создании значением, переданным в функцию, присвоили новое значение и он стал указателем на новый объект. После чего указатель благополучно был убит при раскрутке стека. Что и требовалось доказать. Вот как раз тут и должно быть:
А для чего вы нарочно переназначили указатель, переданный в функцию ? Конечно будет утечка. Но это не "классическая утечка", а классическая ошибка работы с указателем на объект.
Здесь не нужно создавать новый объект, а работать нужно с внешним объектом, указатель на который передан в функцию.
Да ладно! То-то постоянно использую.
Где? В каком месте и каким образом?