MQL5におけるOOPに関する質問 - ページ 7 1234567891011121314...96 新しいコメント Igor Makanu 2019.07.05 08:25 #61 Dmitry Fedoseev: オブジェクトの数があらかじめ分かっていて、プログラムの実行中も一定であれば、newは必要ない。それ以外の場合は、新品が必要です。 いいえ、以下は私の例ですhttps://www.mql5.com/ru/forum/160683/page861#comment_11840254 コンストラクタにパラメータを渡しておけば、ユーザが設定を変更したときに OnDeinit() でクラスを終了させ、OnInit() で新しいパラメータを指定してクラスを作成できるため便利です。 ;) Dmitry Fedoseev 2019.07.05 08:46 #62 Igor Makanu: no, 以下は私の例ですhttps://www.mql5.com/ru/forum/160683/page861#comment_11840254 コンストラクタにパラメータを渡すと便利で、ユーザーが設定を変更した場合は、OnDeinit()でクラスを終了させ、OnInit()で新しいパラメータを指定してクラスを作成する方が速いです。 ;) パラメータは、new なしでコンストラクタに渡すこともできます。 Igor Makanu 2019.07.05 08:57 #63 Dmitry Fedoseev: パラメータは、new なしでコンストラクタに渡すことができます。 では、クラスフィールド(ユーザーが変更したEA設定)はどのように変更するのでしょうか?- もう1つメソッドを書いていただけますか?最後のページで「ポインタのための変数が1つ 増える」ことを争っているのかと思いました。"そして、ここに全てのメソッドがある! ;) Dmitry Fedoseev 2019.07.05 09:09 #64 Igor Makanu: そして、クラスフィールド(ユーザーが変更したEA設定)をどのように変更するのでしょうか?- 別のメソッドを書くのでしょうか?最後のページで「ポインターの変数を1つ 増やせ」と争っていたような気がしましたが。「と悩んでいたら、こんな方法があったんですね。 ;) input int a1=1; input int a2=2; class CX{ public: void CX(int a,int b){ } }; CX cx(a1,a2); Igor Makanu 2019.07.05 09:16 #65 Dmitry Fedoseev: まさか) #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict input int a1=1; input int a2=2; //+------------------------------------------------------------------+ class CX { public: int a1,a2; void CX(int a,int b) {a1=a;a2=b; } }; CX cx(a1,a2); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ void OnTick() { Comment("cx.a1 = ",cx.a1,"\ncx.a2 = ",cx.a2); } //+------------------------------------------------------------------+ EAの 設定を変更する Dmitry Fedoseev 2019.07.05 09:28 #66 Igor Makanu: まさか) EA設定 変更 クールなアンブッシュ。 ただ、パラメータを変更するメソッドは追加したいが、パラメータがあるからといってnewを使用するのは避けたい。 Igor Makanu 2019.07.05 09:40 #67 Dmitry Fedoseev: クールなアンブッシュ。 とはいえ、パラメータを変更するメソッドを追加するのが望ましいのですが、パラメータがあるからといってnewを使うことはありません。 新品を使わないのは迷信?))) イモトは、便利なら使わなきゃ損!- あなたのサンプルは、newを使用して2クリックで書き換えられ、すべてが正しく動作し、ユーザーが設定を変更した場合の状況を処理することができます。 #property strict input int a1=1; input int a2=2; //+------------------------------------------------------------------+ class CX { public: int a1,a2; void CX(int a,int b) {a1=a;a2=b; } }; CX *cx; //+------------------------------------------------------------------+ int OnInit() { cx = new CX(a1,a2); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) { delete cx; } //+------------------------------------------------------------------+ void OnTick() { Comment("cx.a1 = ",cx.a1,"\ncx.a2 = ",cx.a2); } //+------------------------------------------------------------------+ Dmitry Fedoseev 2019.07.05 09:48 #68 Igor Makanu: 新品を使わないのは迷信?))) イモトは、便利なら使わなきゃ損!- あなたのサンプルは、newを使用して2クリックで書き換えられ、すべてが正しく動作し、ユーザーが設定を変更した場合の状況を処理することができます。 迷信ではなく、歴史的に見ても、事情があっての怠慢です。Deinit()の中でdeleteを書いてやる必要があります。しかし、Deinit()関数は、デフォルトではテンプレートにありませんでした。今見ると、EAテンプレートにはDeinit()がありますが、以前はありませんでした。 Igor Makanu 2019.07.05 09:51 #69 Dmitry Fedoseev: 迷信ではなく、歴史的に見ても、事情があっての怠慢です。deleteを書き、Deinit()の中で行うべきでしょう。しかし、Deinit()関数は、デフォルトではテンプレートに存在しませんでした。今見ていますが、EAテンプレートにDeinit()がありますが、以前はありませんでした。 削除を書き込まないでください - すべてが正しく動作します、この罪(私は迷信を意味する) ) 。) がターミナルを占拠し、ログに「48バイトのリークメモリ」「2つのタイプCXのオブジェクトが残っている」「削除されていないオブジェクトが残っている」とつぶやきます。 HH:インジケータ・ テンプレートにDeinit()がない - これは迷惑だ Dmitry Fedoseev 2019.07.05 09:55 #70 Igor Makanu: 削除を書き込まないでください - すべてが正しく動作します、この罪(私は迷信を意味する))。) がターミナルを引き継ぎ、ログに "48 bytes of leaked memory"、次に "2 objects of type CX left" と "undeleted objects left" とつぶやくでしょう。 SZY:インジケータを作成 するテンプレートにDeinit()がない - それは歪む 削除しなくても動作はしますが、使い物になりません。しかし、この問題は端末が解決してくれるのでしょうか?メモリリークを報告するだけで、同じオブジェクトをデバッグすることはない。 1234567891011121314...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
オブジェクトの数があらかじめ分かっていて、プログラムの実行中も一定であれば、newは必要ない。それ以外の場合は、新品が必要です。
いいえ、以下は私の例ですhttps://www.mql5.com/ru/forum/160683/page861#comment_11840254
コンストラクタにパラメータを渡しておけば、ユーザが設定を変更したときに OnDeinit() でクラスを終了させ、OnInit() で新しいパラメータを指定してクラスを作成できるため便利です。
;)
no, 以下は私の例ですhttps://www.mql5.com/ru/forum/160683/page861#comment_11840254
コンストラクタにパラメータを渡すと便利で、ユーザーが設定を変更した場合は、OnDeinit()でクラスを終了させ、OnInit()で新しいパラメータを指定してクラスを作成する方が速いです。
;)
パラメータは、new なしでコンストラクタに渡すこともできます。
パラメータは、new なしでコンストラクタに渡すことができます。
では、クラスフィールド(ユーザーが変更したEA設定)はどのように変更するのでしょうか?- もう1つメソッドを書いていただけますか?最後のページで「ポインタのための変数が1つ 増える」ことを争っているのかと思いました。"そして、ここに全てのメソッドがある!
;)
そして、クラスフィールド(ユーザーが変更したEA設定)をどのように変更するのでしょうか?- 別のメソッドを書くのでしょうか?最後のページで「ポインターの変数を1つ 増やせ」と争っていたような気がしましたが。「と悩んでいたら、こんな方法があったんですね。
;)
まさか)
EAの 設定を変更する
まさか)
EA設定 変更
クールなアンブッシュ。
ただ、パラメータを変更するメソッドは追加したいが、パラメータがあるからといってnewを使用するのは避けたい。クールなアンブッシュ。
とはいえ、パラメータを変更するメソッドを追加するのが望ましいのですが、パラメータがあるからといってnewを使うことはありません。新品を使わないのは迷信?)))
イモトは、便利なら使わなきゃ損!- あなたのサンプルは、newを使用して2クリックで書き換えられ、すべてが正しく動作し、ユーザーが設定を変更した場合の状況を処理することができます。
新品を使わないのは迷信?)))
イモトは、便利なら使わなきゃ損!- あなたのサンプルは、newを使用して2クリックで書き換えられ、すべてが正しく動作し、ユーザーが設定を変更した場合の状況を処理することができます。
迷信ではなく、歴史的に見ても、事情があっての怠慢です。Deinit()の中でdeleteを書いてやる必要があります。しかし、Deinit()関数は、デフォルトではテンプレートにありませんでした。今見ると、EAテンプレートにはDeinit()がありますが、以前はありませんでした。
迷信ではなく、歴史的に見ても、事情があっての怠慢です。deleteを書き、Deinit()の中で行うべきでしょう。しかし、Deinit()関数は、デフォルトではテンプレートに存在しませんでした。今見ていますが、EAテンプレートにDeinit()がありますが、以前はありませんでした。
削除を書き込まないでください - すべてが正しく動作します、この罪(私は迷信を意味する) ) 。) がターミナルを占拠し、ログに「48バイトのリークメモリ」「2つのタイプCXのオブジェクトが残っている」「削除されていないオブジェクトが残っている」とつぶやきます。
HH:インジケータ・ テンプレートにDeinit()がない - これは迷惑だ
削除を書き込まないでください - すべてが正しく動作します、この罪(私は迷信を意味する))。) がターミナルを引き継ぎ、ログに "48 bytes of leaked memory"、次に "2 objects of type CX left" と "undeleted objects left" とつぶやくでしょう。
SZY:インジケータを作成 するテンプレートにDeinit()がない - それは歪む
削除しなくても動作はしますが、使い物になりません。しかし、この問題は端末が解決してくれるのでしょうか?メモリリークを報告するだけで、同じオブジェクトをデバッグすることはない。