MQL5'te OOP hakkında sorular - sayfa 72

 

bir yerdeMQL5'teki işaretçileri yanlış anlıyorum - çok "gösterge olmayan bir şey"

bir sorunla karşılaştım, test betiği (kütüphaneyi ekledim):

bu kod işaretçiyi siler, her şey yolunda

 #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; 
}

Şöyle yazmak istedim:

 #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; 
}

betiği çalıştırdığımda şunu alıyorum: JSONParser türünde 1 nesne kaldı


peki, bu JSONParser'ı işlevin dışında nasıl kaldırırsınız?


Dosyalar:
Include.zip  12 kb
 
Igor Makanu :

bir yerdeMQL5'teki işaretçileri yanlış anlıyorum - çok "gösterge olmayan bir şey"

bir sorunla karşılaştım, test betiği (kütüphaneyi ekledim):

bu kod işaretçiyi siler, her şey yolunda

Şöyle yazmak istedim:

betiği çalıştırdığımda şunu alıyorum: JSONParser türünde 1 nesne kaldı


peki, bu JSONParser'ı işlevin dışında nasıl kaldırırsınız?


Yığın üzerinde, bu durumda geçici bir nesne oluşturulmalıdır)))
CSomeObj(<params>).SomeMethod()
 
Vladimir Simakov :
Yığın üzerinde, bu durumda geçici bir nesne oluşturulmalıdır)))
CSomeObj(<params>).SomeMethod()

bu benim ilk örneğim, orada yerel görünürlükte JSONParser oluşturuyorum, işlevden çıktığınızda silinecek

prensipte soru şu ki, 2 numaralı örnek gibi şeyler Sharp tarafından yutulacak ve burada hala düşünmeniz gerekiyor ... genel olarak, Sharp Artılardan daha özlü !! - yani holivar için! )))

 
Igor Makanu :

bu benim ilk örneğim, orada yerel görünürlükte JSONParser oluşturuyorum, işlevden çıktığınızda silinecek

prensipte soru şu ki, 2 numaralı örnek gibi şeyler Sharp tarafından yutulacak ve burada hala düşünmeniz gerekiyor ... genel olarak, Sharp Artılardan daha özlü !! - yani holivar için! )))

Yerel alandaki bir nesneye bir işaretçi yaratırsınız ve nesnenin kendisi yığındadır ve sızan odur).
Keskin yok, çöp toplayıcı yok)))
 
Vladimir Simakov :
Yerel alandaki bir nesneye bir işaretçi yaratırsınız ve nesnenin kendisi yığındadır ve sızan odur).
Keskin yok, çöp toplayıcı yok)))

Keskin kurallar diyorum! )))

Mon, genel olarak, ilk seçeneği kullanacağım ve beynimi uçurmayacağım, katıldığınız için teşekkürler!

 

neyse, MQL'deki işaretçilerin davranışını anlamıyorum, bu kod sorunsuz çalışıyor ve betiğin sonunda dinamik olarak oluşturulan tüm nesneleri silecek:

 #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;
}


neden çalışıyor? Oluşturulan JSONParser *parser nesnesini sildim ve buna göre genel olarak tüm ilişkili işaretçileri NULL olarak almalıyım

 
Igor Makanu :

neyse, MQL'deki işaretçilerin davranışını anlamıyorum, bu kod sorunsuz çalışıyor ve betiğin sonunda dinamik olarak oluşturulan tüm nesneleri silecek:


neden çalışıyor? Oluşturulan JSONParser *parser nesnesini sildim ve buna göre genel olarak tüm ilişkili işaretçileri NULL olarak almalıyım

bu nereden?

yine, bu keskin değil, böyle "ilgili bağlantılar" yok .. Nesne, bağlantılardan bağımsız olarak programcı kişisel olarak yenene kadar yaşar

 
Maxim Kuznetsov :

bu neyden?

yine, bu keskin değil, böyle "ilgili bağlantılar" yok .. Nesne, bağlantılardan bağımsız olarak programcı kişisel olarak yenene kadar yaşar

yani soru bu, kodun uygulanabilir bir versiyonu var ve işaretçilerin davranışı benim için net değil

teorik olarak, ilk mesajdaki 2 numaralı seçenek işe yaramış olmalıydı

 
"Yüksek" hakkında tartışmalara giren kullanıcılar, pratikte 1 + 1'i toplayamadıklarında akıllı ve bilgedir.
Dunning-Kruger etkisinin hiçbir yere baskı yapmaması onlar için ilginç mi?
 

Burada ne kadar kibirliyim, ..

bilgide indirim var, indirim yok) hepsi pahalı olmasına rağmen