Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
1) подумалось, здесь ошибка:
раздел: Передача параметров в конструктор"Функция Init() отставлена в секции private для обеспечения возможности переинициализации класса."
возможно:
Функция Init() отставлена в секции public для обеспечения возможности переинициализации класса.
2) Приведите, пожалуйста, пример использования возможности "создать массив с экземплярами классов (объектами)", для раздела" Массив объектов". Сам, к сожалению, не могу сообразить "с чем это едят".
3) в разделе "Еще об инкапсуляции (private, protected, public)" вскользь обозначено базовый класс->класс потомок. Возможно, эту данность (class Class: public CBase) надо в начале раздела объяснить, т.к. позже сообразил.
4) не нашёл:Рис.6. Видимость "лишней" функции (красная стрелка) определяется типом указателя, с помощью которого загружен класс. Этот пример находится в приложении в файле OOP_sDefaultVirtual_1.mq5.
5) Не нашёл четкого указания, что такое библиотека. Видимо, способ хранения класса(классов) функций? т.е. аналогично включаемому файлу, только включаемый файл - хранится в виде исходника, а библиотека в виде скомпилированной dll?
Огромное Спасибо за статью! Особенно порадовало, последовательное изложение материала.
1) подумалось, здесь ошибка:
раздел: Передача параметров в конструктор"Функция Init() отставлена в секции private для обеспечения возможности переинициализации класса."
возможно:
Функция Init() отставлена в секции public для обеспечения возможности переинициализации класса.
2) Приведите, пожалуйста, пример использования возможности "создать массив с экземплярами классов (объектами)", для раздела" Массив объектов". Сам, к сожалению, не могу сообразить "с чем это едят".
3) в разделе "Еще об инкапсуляции (private, protected, public)" вскользь обозначено базовый класс->класс потомок. Возможно, эту данность (class Class: public CBase) надо в начале раздела объяснить, т.к. позже сообразил.
4) не нашёл:Рис.6. Видимость "лишней" функции (красная стрелка) определяется типом указателя, с помощью которого загружен класс. Этот пример находится в приложении в файле OOP_sDefaultVirtual_1.mq5.
5) Не нашёл четкого указания, что такое библиотека. Видимо, способ хранения класса(классов) функций? т.е. аналогично включаемому файлу, только включаемый файл - хранится в виде исходника, а библиотека в виде скомпилированной dll?
Огромное Спасибо за статью! Особенно порадовало, последовательное изложение материала.
1. Да.
2. Есть пример в разделе "Массив объектов", собственно весь раздел это пример с описанием.
3. Рассматривается в разделе "Использование ООП для изменения логики работы программы".
4. Слова "Этот пример находится в приложении в файле..." означает, что в файле находится пример к разделу обозначенному загловком раздела. Это восе не означает, что в примерах продублировано все, про что написано в статье. Этих примеров вообще может не быть, все написано в статье. Но примеры есть, можете брать их за основу и экспериментировать. Первична статья, примеры вторичны.
5. Уже давно указано: http://ru.wikipedia.org/wiki/%C1%E8%E1%EB%E8%EE%F2%E5%EA%E0_(%EF%F0%EE%E3%F0%E0%EC%EC%E8%F0%EE%E2%E0%ED%E8%E5)
Очень интересная статья, написанная грамотным "доступным" языком.
Автору спасибо.
У меня есть два примера кода, основанных/скопированных из этой статьи. Они оба создают массив указателей на класс и затем удаляют их при выходе. Однако один выходит с утечкой памяти, а другой выходит без утечки памяти. Единственное различие заключается в том, что во втором примере 'Alert' в деструкторе закомментирован. Когда предупреждение в деструкторе удаляется, происходит утечка памяти. Это очень странно. Кто-нибудь может объяснить??? Пожалуйста, помогите, это сводит меня с ума.
В конце примеров кода из этой статьи я включил очень простой пример кода, который я написал, который также имеет утечку памяти. Опять же, почему???? В этом последнем примере кода нет ничего сложного...
Этот код работает без утечки памяти:
Сообщения из журнала эксперта, обратите внимание на отсутствие утечки памяти:
PI 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 0
KP 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Деструктор 1
JG 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Деструктор 2
EN 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Деструктор 3
LF 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Деструктор 4
OM 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Деструктор 5
FD 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 6
IK 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 7
HS 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 8
CJ 0 OOP_sConstDestr_2 (EURUSD,M1) 13:57:59 Destructor 9
Этот код завершается с утечкой памяти!!!! Почему????????? Единственное отличие - это раскомментирование 'Alert' в деструкторе...
Сообщения из экспертного журнала, обратите внимание на утечку памяти:
FM 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 Осталось 10 не удаленных объектов.
EG 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 Осталось 10 объектов типа CName
GO 1 OOP_sConstDestr_2 (EURUSD,M1) 13:51:19 200 байт утечки памяти
Последний пример, мой код, очень простой, но завершается с утечкой памяти....
Сообщения из журнала эксперта, обратите внимание на утечку памяти:
MR 0 tester (EURUSD,M1) 14:07:23 Последняя ошибка - 0 Текущее время: 2013.02.06 23:07:23
FL 1 tester (EURUSD,M1) 14:07:23 Осталось 10 не удаленных объектов
KN 1 tester (EURUSD,M1) 14:07:23 Осталось 10 объектов типа CCandleStick
JS 1 tester (EURUSD,M1) 14:07:23 160 байт утечки памяти
У меня есть два примера...
Проверил все три вараинта. Все три идентичны. Все в норме. Ни один не дает утечек. В этих примерах такого быть не может - у нас есть массив, в каждом элементе массива есть экземпляр, при завершении мы удаляем все объекты. Объекты не создают копий самих себя, вы не можете пропустить удаление чего-то одного. Если объект создает копию самого себя, то могут возникнуть трудности с удалением, очень легко что-то пропустить. Показывайте варианты, которые действительно имеют утечку.
Используйте кнопку SRC для вставки кода (лучше - прикрепляйте файлы).
Sorry for my english:)
Проверил все три вараинта. Все три идентичны. Все в норме. Ни один не дает утечек. В этих примерах такого быть не может - у нас есть массив, в каждом элементе массива есть экземпляр, при завершении мы удаляем все объекты. Объекты не создают копий самих себя, вы не можете пропустить удаление чего-то одного. Если объект создает копию самого себя, то могут возникнуть трудности с удалением, очень легко что-то пропустить. Показывайте варианты, которые действительно имеют утечку.
Используйте кнопку SRC для вставки кода (лучше - прикрепляйте файлы).
Sorry for my english:)
Большое спасибо, что нашли время ответить. Я не уверен, что вы видели мой последующий вопрос. Он был в отдельном комментарии, который, вероятно, был удален, потому что я не очень хорошо знаком с этим форумом. Тем не менее, я попробовал запустить все три примера на старом компьютере со старой версией MetaTrader. В старой версии все три примера работали нормально. Он не генерировал ошибку "утечки памяти" экспертного журнала, я думаю, это был билд 560??, ни для одного из примеров кода. Кажется, это был билд 560??? Я не помню, и я обновил билд 560 до нового билда 756. После нового билда у меня те же проблемы с утечкой памяти. Возможно ли, что старый билд не сообщал о проблемах с утечкой памяти, потому что это не было функцией? Какой билд вы используете? Еще раз спасибо.