Вопросы по ООП в MQL5 - страница 72

 

где то недопонимаю с указателями в MQL5 - очень "неуказательная штука"

с проблемой столкнулся, тестовый скрипт (библиотеку приатачил):

этот код удалит указатель, все ОК

#include <JSON\json.mqh>

JSONObject * getJSONObject(const string json)
{
   JSONParser  parser;
   JSONValue*  jv;
   JSONObject* jo = jv = ((JSONParser)(parser)).parse(json);
   if (jv != NULL && jv.isObject()) return(jo);
   Print(__FUNCSIG__ + "parser error, json = ",json);
   delete jv; 
   return(NULL);
}
void OnStart()
{
   JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}");
   if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period"));
   delete jobj; 
}

хотел сначала так написать:

#include <JSON\json.mqh>

JSONObject * getJSONObject(const string json)
{
   JSONValue *jv =((JSONParser *)(new JSONParser())).parse(json);
   if (jv != NULL && jv.isObject()) return((JSONObject *)jv);
   Print(__FUNCSIG__ + "parser error, json = ",json);
   delete jv; 
   return(NULL);
}
void OnStart()
{
   JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}");
   if(jobj!=NULL) Print("m_period = ", jobj.getInt("m_period"));
   delete jobj; 
}

при выполнении скрипта получаю: 1 object of type JSONParser left


ну и как бы удалить этот JSONParser за пределами функции ?


Файлы:
Include.zip  12 kb
 
Igor Makanu:

где то недопонимаю с указателями в MQL5 - очень "неуказательная штука"

с проблемой столкнулся, тестовый скрипт (библиотеку приатачил):

этот код удалит указатель, все ОК

хотел сначала так написать:

при выполнении скрипта получаю: 1 object of type JSONParser left


ну и как бы удалить этот JSONParser за пределами функции ?


На стеке временный объект создавать надо в этом случае)))
CSomeObj(<params>).SomeMethod()
 
Vladimir Simakov:
На стеке временный объект создавать надо в этом случае)))
CSomeObj(<params>).SomeMethod()

это первый мой пример, там и создаю в локальной видимости JSONParser , при выходе из ф-ции он удалится

вопрос, в принципе в том, что такие штуки как пример№ 2 Шарп проглотит, а тут нужно еще подумать... в общем Шарп лаконичней Плюсов!!  - так для холивара! )))

 
Igor Makanu:

это первый мой пример, там и создаю в локальной видимости JSONParser , при выходе из ф-ции он удалится

вопрос, в принципе в том, что такие штуки как пример№ 2 Шарп проглотит, а тут нужно еще подумать... в общем Шарп лаконичней Плюсов!!  - так для холивара! )))

Ты в локальной области создаешь указатель на объект, а сам объект в куче и именно он и утекает).
Тут не шарп, сборщик мусора отсутствует)))
 
Vladimir Simakov:
Ты в локальной области создаешь указатель на объект, а сам объект в куче и именно он и утекает).
Тут не шарп, сборщик мусора отсутствует)))

я ж говорю Шарп рулит! )))

пн, в общем первый вариант буду юзать и не буду парить мозг, пасиб за участие!

 

все равно поведение указателей в MQL не пойму, этот код работает без проблем и удалит по окончанию скрипта все динамически созданные обьекты:

#include <JSON\json.mqh>
//+------------------------------------------------------------------+
JSONObject *getJSONObject(const string json)
{
   JSONParser *parser = new JSONParser();
   JSONValue *jv = parser.parse(json);
   delete parser;
   if (jv != NULL && jv.isObject()) return((JSONObject *)jv);
   Print(__FUNCSIG__ + "parser error, json = ", json);
   delete jv;
   return(NULL);
}
//+------------------------------------------------------------------+
void OnStart()
{
   JSONObject *jobj = getJSONObject("{\"ObjType\":2,\"m_period\":1}");
   if(jobj != NULL) Print("m_period = ", jobj.getInt("m_period"));
   delete jobj;
}


почему это работает? я же удалил созданный обьект JSONParser *parser , и соответственно вообще должен  получать все связанные указатели как NULL

 
Igor Makanu:

все равно поведение указателей в MQL не пойму, этот код работает без проблем и удалит по окончанию скрипта все динамически созданные обьекты:


почему это работает? я же удалил созданный обьект JSONParser *parser , и соответственно вообще должен  получать все связанные указатели как NULL

это с чего-бы ?

опять-же это не шарп, нету так такого "связанные ссылки".. Объект живёт пока его не прибьёт программист лично, вне зависимости от ссылок

 
Maxim Kuznetsov:

это с чего-бы ?

опять-же это не шарп, нету так такого "связанные ссылки".. Объект живёт пока его не прибьёт программист лично, вне зависимости от ссылок

дык в этом и вопрос то , работоспособный вариант кода есть, а поведение указателей не понятно мне 

в теории должен был работать вариант №2 из первого сообщения

 
Умиляют пользователи, которые лезут в дискуссии о  "высоком", когда на практике 1+1 сложить не могут.
Интересно им эффект Даннинга-Крюгера ни куда не жмет?
 

на сколько я здесь наглый, ..

тебе скидка на знания, мне скидки не было) хоть и все дорогие