MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 598 1...591592593594595596597598599600601602603604605...1953 新しいコメント Vasiliy Sokolov 2018.08.09 12:31 #5971 Juer:CArrayObjオブジェクトを作成し、そこに他のオブジェクトを追加しているのかどうか教えてください。やはり、モノそのものが必要です。そして、このリストオブジェクトを削除することができます。 削除する前に、どの方法でオブジェクトを削除すればいいのでしょうか?Detach() かDelete() か? またはClear()/Shutdown()?混乱するのは、メモリがどのように割り当てられ、どのように処理されるべきかを理解していないためです。一般に、CArrayObjやその中に位置するオブジェクトは存在しない。 手動で削除する必要はありません. // Где-то в коде есть объект CArrayObj CArrayObj ArrayOfItems; ... //Где-то в коде заполнили коллекцию пользовательскими объектами void Create() { ArrayOfItems.Add(new CUserItem()); ArrayOfItems.Add(new CUserItem()); //... ArrayOfItems.Add(new CUserItem()); } // Так не правильно делать. Удалять ничего не надо. void OnDeinit(const int reason) { delete ArrayOfItems; } Juer 2018.08.09 12:55 #5972 クラス関数にオブジェクトを渡し、その参照を渡すことで、関数内のアクションがそのオブジェクトに起こり、それが返されるようにしています。でも、もうクラスオブジェクト そのものは必要ないんですよね...。では、どのように削除すればいいのでしょうか? for(int i=0;i<test_objects.Total();i++) { bool res=false; CTestObject *test_object=test_objects.At(i); if(!CheckPointer(test_object) continue; CTestClass *test_class=new CTestClass(); if(test_class.Check(test_object)) res=true; delete test_class; } こんな感じ。test_classを削除すると、Invalid pointer at the next iterationと表示される...。 test_classに渡されたオブジェクトを削除せずに、test_classを削除するには? Juer 2018.08.09 12:57 #5973 Vasiliy Sokolov:メモリがどのように割り当てられ、どのように処理されるべきかを理解していないため、混乱しているのです。一般的なケースでは、CArrayObjとその中のオブジェクトのいずれも , 手動で削除する必要はありません. さて、もし私がオブジェクトの配列を作ったとしたら。つまり、配列オブジェクトArrayObjを作成し、それに対して必要なアクションを実行したのです。では、このオブジェクトは必要なく、その中のオブジェクトそのもの(配列のメンバー)が必要なのですが、この配列オブジェクトは削除してはいけないのでしょうか? 削除済み 2018.08.09 13:07 #5974 このvv Ihor Heraskoは週末にそれを作る、そしてそれはそこにない ; ) の質問は、先週の木曜日から保留になっています。: ) このままでは来週いっぱい待たされるし、フクロウをフリーランサーに渡して修正してもらわなければならない ; ) Vasiliy Sokolov 2018.08.09 13:20 #5975 Juer:クラス関数にオブジェクトを渡し、その参照を渡すことで、関数内のアクションがそのオブジェクトに起こり、それが返されるようにしています。でも、もうクラスオブジェクト そのものは必要ないんですよね...。では、どのように削除すればいいのでしょうか? こんな感じ。test_classを削除すると、Invalid pointer at the next iterationと表示される...。 test_classに渡されたオブジェクトを削除せずに、test_classを削除するには?オブジェクトへのポインターを作らないようにする必要があります。その代わり、関数のスタック上にあるオブジェクトを直接操作します。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) { bool res=false; CTestObject *test_object=dynamic_cast<CTestObject*>(test_objects.At(i)); if(test_object == NULL) continue; if(test_class.Check(test_object)) res=true; } test_objectはCTestObjectを含むことが保証されているので(これらのオブジェクト以外に何も追加していませんよね:)、ゴーストチェックを削除することでコードを簡素化することができます。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) { CTestObject *test_object = test_objects.At(i); bool res = test_class.Check(test_object); } そして、ほんの少しだけ。 CTestClass test_class; for(int i=0;i<test_objects.Total();i++) bool res = test_class.Check((CTestObject)test_objects.At(i)); Vasiliy Sokolov 2018.08.09 13:26 #5976 Juer:さて、もし私がオブジェクトの配列を作ったとしたら。つまり、配列オブジェクトArrayObjを作成し、それに対して必要なアクションを実行したのです。では、このオブジェクトは必要なく、中のオブジェクトそのもの(配列のメンバー)が必要なのですが、この配列オブジェクトは削除してはいけないのでしょうか?CArrayObjの目的を理解していない。そこに置くモノの所有者です。CArrayObjを削除すると、その中に入れていたオブジェクトも削除されます。ArrayObjはこれらのオブジェクトのオーナーであるため、オブジェクトへの参照を制御し、コレクションが不要になったら割り当てられたすべてのメモリを自動的に削除するというマネージャーでもあるのだ。だから、何もフリーにして、delete演算 子を使う必要はないのです。全てはCArrayObj自身が行っています。CArrayObj自体はコンピュータ内でほとんどメモリを消費しない(数十バイト)ので、削除しようとしても無意味です。 Juer 2018.08.09 13:31 #5977 Vasiliy Sokolov:CArrayObjの目的を理解していない。そこに置くモノの所有者です。CArrayObjを削除すると、その中に入れたオブジェクトも削除されます。ArrayObjはこれらのオブジェクトのオーナーであるため、オブジェクトへの参照を制御し、コレクションが不要になったら割り当てられたすべてのメモリを自動的に削除するというマネージャーでもあるのだ。だから、何もフリーにして、delete演算 子を使う必要はないのです。全てはCArrayObj自身が行っています。CArrayObj自体はコンピュータ内でほとんどメモリを消費しない(数十バイト)ので、削除しようとしても無駄です。しかし、その後、削除されていないオブジェクトのエラー CArrayObj Vasiliy Sokolov 2018.08.09 13:41 #5978 Juer:しかし、その後、削除されていないオブジェクトのエラー CArrayObjだから、CArrayObjでミスをしたのだ。CArrayObj test_objects の代わりにCArrayObj* test_objects を書きましたが、そのコンストラクタを作るのを忘れていました。 おそらく CArrayObj を扱うメモリモデルの設定が間違っていたのでしょう。プログラマーは、単にポインターを使いすぎただけなのかもしれません。診断は明快で、必要のないところでポインターを 使うと、しばしばリークを起こす。 削除済み 2018.08.09 14:07 #5979 こんにちは。 テキスト文書の例えば7行目にカーソルを移動して、この位置から部分文字 列を抽出する方法を教えてください...。 1行で複数のテキストファイルと、1行で複数のファイルではどちらが速いですか? Juer 2018.08.09 14:16 #5980 Vasiliy Sokolov:だから、CArrayObjでミスをしたのだ。CArrayObj test_objects の代わりに:CArrayObj* test_objects を書きましたが、そのデストラクタを作るのを忘れていました。 単にポインターを付けすぎただけかもしれません。診断は明快で、必要のないところでポインターを 使うと、しばしばリークを起こす。しかし、どこに全く必要ないのでしょうか?オブジェクトを宣言するだけなら、使う意味はないでしょう? 1...591592593594595596597598599600601602603604605...1953 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
CArrayObjオブジェクトを作成し、そこに他のオブジェクトを追加しているのかどうか教えてください。やはり、モノそのものが必要です。そして、このリストオブジェクトを削除することができます。
削除する前に、どの方法でオブジェクトを削除すればいいのでしょうか?Detach() かDelete() か?
またはClear()/Shutdown()?
混乱するのは、メモリがどのように割り当てられ、どのように処理されるべきかを理解していないためです。一般に、CArrayObjやその中に位置するオブジェクトは存在しない。 手動で削除する必要はありません.
クラス関数にオブジェクトを渡し、その参照を渡すことで、関数内のアクションがそのオブジェクトに起こり、それが返されるようにしています。でも、もうクラスオブジェクト そのものは必要ないんですよね...。では、どのように削除すればいいのでしょうか?
こんな感じ。test_classを削除すると、Invalid pointer at the next iterationと表示される...。
test_classに渡されたオブジェクトを削除せずに、test_classを削除するには?
メモリがどのように割り当てられ、どのように処理されるべきかを理解していないため、混乱しているのです。一般的なケースでは、CArrayObjとその中のオブジェクトのいずれも , 手動で削除する必要はありません.
さて、もし私がオブジェクトの配列を作ったとしたら。つまり、配列オブジェクトArrayObjを作成し、それに対して必要なアクションを実行したのです。では、このオブジェクトは必要なく、その中のオブジェクトそのもの(配列のメンバー)が必要なのですが、この配列オブジェクトは削除してはいけないのでしょうか?
このvv Ihor Heraskoは週末にそれを作る、そしてそれはそこにない ; )
の質問は、先週の木曜日から保留になっています。: )
このままでは来週いっぱい待たされるし、フクロウをフリーランサーに渡して修正してもらわなければならない ; )クラス関数にオブジェクトを渡し、その参照を渡すことで、関数内のアクションがそのオブジェクトに起こり、それが返されるようにしています。でも、もうクラスオブジェクト そのものは必要ないんですよね...。では、どのように削除すればいいのでしょうか?
こんな感じ。test_classを削除すると、Invalid pointer at the next iterationと表示される...。
test_classに渡されたオブジェクトを削除せずに、test_classを削除するには?
オブジェクトへのポインターを作らないようにする必要があります。その代わり、関数のスタック上にあるオブジェクトを直接操作します。
test_objectはCTestObjectを含むことが保証されているので(これらのオブジェクト以外に何も追加していませんよね:)、ゴーストチェックを削除することでコードを簡素化することができます。
そして、ほんの少しだけ。
さて、もし私がオブジェクトの配列を作ったとしたら。つまり、配列オブジェクトArrayObjを作成し、それに対して必要なアクションを実行したのです。では、このオブジェクトは必要なく、中のオブジェクトそのもの(配列のメンバー)が必要なのですが、この配列オブジェクトは削除してはいけないのでしょうか?
CArrayObjの目的を理解していない。そこに置くモノの所有者です。CArrayObjを削除すると、その中に入れていたオブジェクトも削除されます。ArrayObjはこれらのオブジェクトのオーナーであるため、オブジェクトへの参照を制御し、コレクションが不要になったら割り当てられたすべてのメモリを自動的に削除するというマネージャーでもあるのだ。だから、何もフリーにして、delete演算 子を使う必要はないのです。全てはCArrayObj自身が行っています。CArrayObj自体はコンピュータ内でほとんどメモリを消費しない(数十バイト)ので、削除しようとしても無意味です。
CArrayObjの目的を理解していない。そこに置くモノの所有者です。CArrayObjを削除すると、その中に入れたオブジェクトも削除されます。ArrayObjはこれらのオブジェクトのオーナーであるため、オブジェクトへの参照を制御し、コレクションが不要になったら割り当てられたすべてのメモリを自動的に削除するというマネージャーでもあるのだ。だから、何もフリーにして、delete演算 子を使う必要はないのです。全てはCArrayObj自身が行っています。CArrayObj自体はコンピュータ内でほとんどメモリを消費しない(数十バイト)ので、削除しようとしても無駄です。
しかし、その後、削除されていないオブジェクトのエラー CArrayObj
しかし、その後、削除されていないオブジェクトのエラー CArrayObj
だから、CArrayObjでミスをしたのだ。CArrayObj test_objects の代わりにCArrayObj* test_objects を書きましたが、そのコンストラクタを作るのを忘れていました。 おそらく CArrayObj を扱うメモリモデルの設定が間違っていたのでしょう。プログラマーは、単にポインターを使いすぎただけなのかもしれません。診断は明快で、必要のないところでポインターを 使うと、しばしばリークを起こす。
こんにちは。
テキスト文書の例えば7行目にカーソルを移動して、この位置から部分文字 列を抽出する方法を教えてください...。
1行で複数のテキストファイルと、1行で複数のファイルではどちらが速いですか?
だから、CArrayObjでミスをしたのだ。CArrayObj test_objects の代わりに:CArrayObj* test_objects を書きましたが、そのデストラクタを作るのを忘れていました。 単にポインターを付けすぎただけかもしれません。診断は明快で、必要のないところでポインターを 使うと、しばしばリークを起こす。
しかし、どこに全く必要ないのでしょうか?オブジェクトを宣言するだけなら、使う意味はないでしょう?