MQL5におけるOOPに関する質問 - ページ 73

 
Igor Makanu:

適切なコミュニケーションのレベルに自分を下げる:私の質問は、スレッドのトピックに関するものですか? なぜあなたはインターネットから写真を持ってここに来たのですか? あなたは答えを知っているのですか?- いいえ、座って、黙って;)

第一に、私をつつかないでください、第二に、真実に対してそんなに激しく反応しないでください。
正直なところ、今日の対談相手とはあまりかけ離れていない印象を受けますね。

MQL4、MQL5の初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど

イゴール・マカヌ さん 2020.06.07 13:46

皆さん、こんにちは。私のコードにString変数を挿入するのを手伝ってください。ありがとうございました。


それとも、どこかのコードの一部を切り取って使えないのか?少なくとも何が起こっているのか推測しなければならない))
......
でも、このやり方では答えにならないのでしょうね。

 

某悪名高き親切なモデレーターは、口答えをするとあなたを追放すると約束しました :-)

待ち

 
ある者はより多く、ある者はより少なく知っている。このフォーラムは、コミュニケーションとQ&Aの場です。
知識を深めるために質問することは、恥ずかしいことではありません。質問者を見下すような態度は恥ずかしい。これでは、次のコースに進んだ学生が「唇で感じる聖なる知識」を放送しているようなものである。全体的にザワザワする...。
 
Maxim Kuznetsov:

ある悪名高い優秀なモデレーターは、口答えをするとあなたを追放すると約束しました :-)

まてよ

私は、軍隊ですべての呪いの言葉を使いました、それなしでは何もできません。)

 
Maxim Kuznetsov:

ある悪名高い優秀なモデレーターは、口答えをするとあなたを追放すると約束しました :-)

待ち

いや、マキシム、そうではないんだ。ぜひ、心を開いて再読してください。
 
#include <JSON\json.mqh>

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


1. newで作成したJSONParser 型のオブジェクトは削除しない
JSONParser*への 無意味なキャスト
JSONParserの ローカル変数で 何が問題なんだ?あるいは、一時的なオブジェクトを使用したいが、そのシグネチャがわからないということでしょうか?

2.JSONObject* における無意味なキャスト
3.jvとjobjの変数がNULLでないことは間違いないでしょうか?そうしないと、MQLでNULLポインターを削除すると、ログに "rubbish "と出力されます。

 
Sergey Dzyublik:


1. newで作成したJSONParser 型のオブジェクトは削除しない
JSONParser*への 無意味なキャスト
JSONParserの ローカル変数で 何が問題なんだ?あるいは、一時的なオブジェクトを使用したいが、そのシグネチャがわからないということでしょうか?

2.JSONObject* における無意味なキャスト
3.jvとjobjの変数がNULLでないことは間違いないでしょうか?そうしないと、MQLでNULLポインターを削除すると、ログに "rubbish "と出力されます。

ありがとうございます、少なくとも何かありますね。

この方法はライブラリの作者が使っていたもので、他の方法でパースするためのコールを書く意味はないと思います。


MQLでポインターを扱うときの状況がよくわからない。ポインターが実体になるとデリファレンスできないし、オブジェクトへのポインターだとどうすればいいのかわからない((

SZY: 私は20年前にC++を勉強しました。その後、生産技術者にはあまり使われなくなりました。最初はみんなDelphiに座って、それからSharpに這い上がってきました。コントローラ用のC++も見たことがありません。すべてが特殊な ソフトウェアで動いています。工学部の学生にとっては大学の刻印でしょうね。彼らはいつもPascalから訓練を始めます。ヴォルゴグラードのポリテクニックでさえ、ターボPascalを読んでいますよ。...誰がどこでコンパイラを手に入れるのか知らないが )))


ZS: コーラスを消すと、いい加減、普通は逆ですよね。

 
Igor Makanu:

ありがとうございます、何かあったんですね。

この方法はライブラリの作者によって使用されたものであり、他の呼び出しの解析方法を書く意味があるとは思えません。


ポインタが実体になると参照解除ができなくなり、オブジェクトへのポインタになると参照解除ができなくなるなど、MQLではポインタを扱うときの状況がよくわかりません((

SZY:私は20年前にC++を勉強しました。その後、生産技術者にはあまり使われていません。最初はみんなDelphiに座っていて、それからSharpに這い上がりました。コントローラもそうです。C++は見たことがありません。すべてが専用の ソフトウェアで動いています。工学部の学生にとっては、大学の刻印でしょうね。彼らはいつもPascalから訓練を始めます。ボルゴグラードのポリテクニックでさえ、ターボPascalを読んでいました。...誰がどこでコンパイラを入手したのか知らないが )))


SZY:コーラスを外す、いい加減なんですよ、普通逆でしょう。

ポインターはありません)クラスのハンドルがあり、それを扱うのはポインターを扱うのと似ていますが、共通するのはそこで終わりです。

では、ハイライトの方です。

  • オブジェクトはスタックかヒープに作成します。
    CTest test;             //test - object
    CTest* test=new CTest;  //test - handle of object
    最初のケースでは、コンパイラは暗黙のデストラクタ呼び出しを追加し、メモリを掃除せず、スタックポインタを関数が呼ば れる前の位置に戻すだけです。2つ目のケースでは、スコープを離れる際に、オブジェクトが占有していたメモリはメモリマネージャによって占有しているとマークされたままであり、ポインタがもうそれを指していないので解放できない(これをメモリリークと呼ぶ)ため、deleteによって明示的にオブジェクトを破棄する必要があります。
  • ローカルランタイムについては。ここで,ハンドルは,特にオーバーロードされた関数がない場合,暗黙のうちにデリファレンスされます.
    class CTest{
    };
    
    void OnStart()
      {
       CTest test;
       CTest* _test=new CTest;
       Test(test);
       Test(&test);
       Test(_test);
       _Test(_test);
       delete _test;
      }
      
    void Test(CTest &test){Print("Object");}
    void Test(CTest* test){Print("Handle");}
    void _Test(CTest &test) {Print("Ok");}
    PS.そう、そしてシャープのことは忘れてください、全く共通点がないのです))))
 

Vladimir Simakov:

PS.そう、そしてシャープのことは忘れてください、何の共通点もありません)))

あなたはそれを得ることはありません、あなたは常に良いものに慣れています、それは論理的です、あなたが台無しにした場合 - VSはすぐに教えてくれます、そして、コードが実行されたとき - あなたは関数本体を残して- ちょうどそれを忘れて、あなたはただNULLを作成したコードに割り当て、それ自体が混乱を削除します )) 。

ありがとうございます、考えてみます。

 
Igor Makanu:

うまくいきません。良いものにはすぐに慣れるし、すべて論理的で、もしどこかで失敗しても - VSはすぐに教えてくれるし、コード実行中に関数本体から 離れると - ただ忘れるだけで、せいぜいNULLを作ったくらいで - 勝手にクリアしてくれます ))。

ありがとうございます、考えてみます。

そう、たった一つの悲しい暗黙のオブジェクト参照(例えば、あるデリゲートのinvokeリーフでのメソッド呼び出し)がコードの茂みに生き、メモリは消えてしまうのです。シャープでもごちゃごちゃ言えない。