После загрузки на исполнение mql5-программы каждой переменной выделяется память в соответствие с типом переменной. Переменные делятся на два типа по уровню доступа - глобальные переменные и локальные переменные, и по классам памяти: входные параметры mql5-программы, статические и автоматические. Каждая переменная при необходимости...
Все объекты, созданные выражением указатель_объекта=new Имя_Класса, обязательно должны быть впоследствии уничтожены оператором delete(указатель_объекта).
Если по каким то причинам такая переменная по окончании работы программы не была уничтожена оператором delete, то об этом будет выведено сообщение в журнал "Эксперты".
Можно объявить несколько переменных и всем им присвоить указатель одного объекта.
Если динамически создаваемый объект имеет конструктор, то этот конструктор будет вызван в момент выполнения оператора new. Если объект имеет деструктор,
то деструктор будет вызван в момент выполнения оператора delete.
ありがとうございました。しかし、そこには私の疑問に対する答えはありませんでした。
A *a= new A のとき、なぜデストラクタが呼ばれないのか理解できない。
https://www.mql5.com/ru/docs/basis/variables/object_live
pointer_object=newClass_name式で生成されたオブジェクトは、その後 delete(pointer_object) 演算子ですべて破棄しなければ ならない。何らかの理由でこの変数が削除オペレータによって 破壊されなかった場合、それに関するメッセージが「Experts」ジャーナルに表示されます。複数の変数を宣言し、それらをすべて同じオブジェクトポインタに代入することが可能です。
MQLにOnTimer()関数の チェックを依頼します。
MT4のStrategy Testerではなぜか動かない(エラーは出ないが、この関数内は何も実行されない)、オンラインでは問題ない。
MT5では、テスターとオンラインの両方で機能します。
ありがとうございました。
OnInitでは2つの数値だけが比較され、フルパスよりもインコレクトパスの方が時間がかかるのですどうして?
このExpert Advisorを完全最適化で動かしてみましょう。
8つのAgentで作業した結果を得ることができる
Expert Advisorはこちらです。
最後に、このような
2系統の出力
2点目については、明らかに何らかのミスがある。OnInitから飛び出すよりも、空走を行った方が時間的にメリットがあります。Incorrect-InitとExpertRemoveの利点がほとんどなくなってしまうので、修正をお願いします。
EA/指標/スクリプトやアカウントを含むお気に入りタブ は、ターミナルを終了した後にのみ記憶されます。このため、異常終了(電源断)すると、このタブはリセットされます。変更する際に保存することは可能でしょうか?
お気に入りにフォルダを追加できたらとても便利だということが、明確に理解されることもあります。
では、こんな風にやってみてください。
結果
1:pointer_automatic
1:ポインターダイナミック
2:ポインターダイナミック
2:ポインターオートマチック
ありがとうございました。かなりの解答です。
でも、コンパイラは悪態をつかないほうがいいかもしれませんね。
これはバグなのか何なのか?
newで クラスのインスタンスを生成しても、デストラクタを呼び出すことはない。
デストラクタを呼び出すための特別なクラスを作るしか解決策はないのでしょうか?それとも、なくても大丈夫なのか?
newで 作成、deleteで 削除
問題は、デストラクタにdeleteを 入れることですが、new (A *a=newA ;) でクラスのインスタンスを生成しても、デストラクタは呼び出されないのです。
どのジグザグ・インディケータでも、価格の極値である高値と安値を導き出すことは可能ですか、また可能であればどのように導き出すのですか?
その安定した結合と、形成されたトップとボトムへの近接性を確保すること。
OBJ_TEXT の例を参照してください。
https://www.mql5.com/ru/docs/basis/variables/object_live
ありがとうございます。
まさにここに書いてある通りです。
つまり、バグではなく、結果的に悪循環に陥る機能なのです。
動的オブジェクトの削除処理を自動化したい場合、デストラクタが呼ばれるのはdeleteの 時だけなので、デストラクタ自体にdeleteを入れても 意味がない。
しかし、@A100がここで 提案したように、自動化は別のクラスの別のインスタンスを通して実装することができる。
ご指摘ありがとうございます。もう、読んでは試し、読んでは試しで、疲れました。ZigZagの実用例を見たいのですが・・・。
私のアバターのようにジグザグに、しかし、下の極値の結合はOKなので、上の極値の結合をRIGHTにします
k=(WindowPriceMax()-WindowPriceMin())/30で縛る方法は、ウィンドウサイズが大きく変化するとうまくいかないので、何か別の方法を希望します...。
OBJ_TEXTの 例では、上と下の両方がバインドされています。リンクをたどって、サンプルを実行する ...
つまり、バグではなく、機能として、結果的に悪循環に陥ってしまうのです。
割り当てられた管理不能なリソースの制御を解決する方法は、スマートポインタを使用することであることは、すでに以前から言われていることです。C++との完全な相似形。
おそらく問題は、解決策が銀の皿の上に提示されなかったことでしょう、すみません。
サイト内検索で "shared_ptr "と入力すれば、最初の結果が表示されるので、ぜひ試してみてください。