И снова указатели на объекты. Ошибка при работе с ними - страница 2

 
vbymrf #:

Вот вам код. Гарантированно приводит к ошибке при смене тайм фрейма. 

Если честно - то у вас тут бред а не код. Если все таки в нем разбираться, то вы создаете обьект, пихаете адрес в o.m и u (кстати форма записи a=b=c=d=e это ад), потом в OnDeinit этот объект удаляете. Так как это указатель - нет никакой разницы как именно он именуется. А потом, пытаетесь обратиться к удаленному объекту. Вообще говоря, такая передача и использование указателей не допустимы. Хотя бы сделали функцию враппер с проверкой на валидность указателя. И вообще, не понятно для чего вообще такой код может быть нужен. Вероятно, вам стоит поучить паттерны и переобдумать архитектуру. А то потом получается код:

Obj* a;
Obj* b = new Obj;
Obj* c = new Obj;
Obj* d = b;
b = a;
c = d;

delete a;

b.func();
 
DrSky #:

Если честно - то у вас тут бред а не код. Если все таки в нем разбираться, то вы создаете обьект, пихаете адрес в o.m и u (кстати форма записи a=b=c=d=e это ад), потом в OnDeinit этот объект удаляете. Так как это указатель - нет никакой разницы как именно он именуется. А потом, пытаетесь обратиться к удаленному объекту. Вообще говоря, такая передача и использование указателей не допустимы. Хотя бы сделали функцию враппер с проверкой на валидность указателя. И вообще, не понятно для чего вообще такой код может быть нужен. Вероятно, вам стоит поучить паттерны и переобдумать архитектуру. А то потом получается код:

Мне нужно логировать логику моих библиотек. Т.к. столкнулся с множеством ошибок - только разбираюсь в mql5 и логирую каждую строчку. Но уже есть несколько библиотек. Т.е. несколько файлов и мне нужны принты от всех их в одном файле и в порядке их вызова. Как мне 

b.func()

 вызвать , что бы это был один объект? А не каждый свой в каждом классе? Только через указатель. 

Если сделать проверки - как мне жить дальше? Потому что если нет объекта - значит нет части логики. Лучше пусть будет ошибка. Все выловлю и потом можно закрыть оберткой с проверкой.

 На самом деле я не знаю что делать, если данные не верны - потому что попадание не верных данных в логику разветвляет модель и делает ее слишком сложной. Под TsLab я писал алгоритмы - и это легко. Мне нравится этот принцип. Все есть и все синхронизировано. Если нет - ничего не делай. 

 
vbymrf #:

 Как мне вызвать , что бы это был один объект? А не каждый свой в каждом классе? Только через указатель. 

Это называется "синглтон". Гуглите.
 
Sergey Gridnev #:
Это называется "синглтон". Гуглите.

а если я запущу несколько роботов с использованием этих библиотек? Каждый их них должен писать в свой файл. Мне не нужен статик класс. 

 
vbymrf #:
Отладчик ещё есть
 
Aliaksandr Hryshyn #:
Отладчик ещё есть

Еще бы разобраться почему у меня тестер не работает ))))

 

Проблема в том, что автоматически создаваемый класс не пересоздается при переключении таймфрейма.

Поэтому к черту упование на конструктор. Всегда писать свой метод для инициализации и вызывать его в ините.

 
vbymrf #:

а если я запущу несколько роботов с использованием этих библиотек? Каждый их них должен писать в свой файл. Мне не нужен статик класс. 

У вас все в кучу смешано. Статик классов не существует, по крайней мере в MQL таких нет.
 
В каждом советнике будет свой синглтон. В пределах одного эксперта он будет один.
 
Dmitry Fedoseev #:
В каждом советнике будет свой синглтон. В пределах одного эксперта он будет один.
class Singleton
{
  private:
    static Singleton * p_instance;
    // Конструкторы и оператор присваивания недоступны клиентам
    Singleton() {}
    Singleton( const Singleton& );  
    Singleton& operator=( Singleton& );
  public:
    static Singleton * getInstance() {
        if(!p_instance)           
            p_instance = new Singleton();
        return p_instance;
    }
};

Пример c++/ Это тоже указатель, который запишется в глобальную переменную. Позже проверю, но что то мне подсказывает, что будет один объект.