エラー、バグ、質問 - ページ 1875 1...186818691870187118721873187418751876187718781879188018811882...3185 新しいコメント Koldun Zloy 2017.04.25 09:40 #18741 おそらくOnStart()関数の 中で手動で呼び出しているからだと思います。静的オブジェクトのデストラクタは、この関数の後に宣言と逆の順序で呼び出されます。 fxsaber 2017.04.25 09:47 #18742 Koldun Zloy:おそらくOnStart()関数の 中で手動で呼び出しているからだと思います。静的オブジェクトのデストラクタは、この関数の後に宣言と逆の順序で呼び出されます。 ここでは、すべてが正しく動作するはずだと思われますtemplate <typename T> struct PTR { T* Ptr; PTR( void ) { } void operator =( T* &Value ) { this.Ptr = Value; } ~PTR( void ) { Print(__FUNCSIG__); delete this.Ptr; } }; class CLASS { private: static PTR<CLASS> Ptr; static CLASS* Tmp; CLASS() { CLASS::Ptr = CLASS::Tmp; } }; static PTR<CLASS> CLASS::Ptr; static CLASS* CLASS::Tmp = new CLASS; void OnStart() { }しかし、漏れは発生する。どこに問題があるのか? Koldun Zloy 2017.04.25 09:55 #18743 fxsaber: ここでは、すべてが正しく動作する必要があると思います。しかし、漏れは起きている。どこに問題があるのか? 2つのオブジェクトを作成し、1つだけ削除します。なぜCLASS::Tmp オブジェクトが必要なのですか? fxsaber 2017.04.25 10:13 #18744 Koldun Zloy: 2つのオブジェクトを作成し、1つだけ削除します。どの時点で2つのオブジェクトが作成されるのか?なぜCLASS::Tmp オブジェクトが必要なのですか?おかげさまで、その必要はありません。しかし、言葉を理解するためには、やはり例によってなぜ漏れが発生するのかを理解したいものです。隠しコンストラクタを持つ隠しオブジェクトは、場合によっては論理的ですが(おそらく最も浸透しているもの だと思います)。 Koldun Zloy 2017.04.25 10:30 #18745 はい、勘違いしてました。オブジェクトが1つだけ作成され、削除されないのですね。なぜなら、コンストラクタを呼び出すときに CLASS() { CLASS::Ptr = CLASS::Tmp; } CLASS::Tmpには、オブジェクトのアドレスではなく、ゴミが入ったままです。 Sergey Dzyublik 2017.04.25 10:36 #18746 1) 構造体 static PTR<CLASS> CLASS::Ptr が生成される. 2) クラスが作成され、new CLASSとなり、コンストラクタCLASS()が実行され、CLASS::PtrにNullが代入される。 3) CLASS::Tmp の値は、新しい CLASS へのポインタによって更新される。 4) PTR<CLASS> 構造体 CLASS::Ptr を削除;デストラクタを実行し、CLASS::Ptr を削除しようとする(それは Null である)。 fxsaber 2017.04.25 10:45 #18747 Koldun Zloy:CLASS::Tmpには、オブジェクトのアドレスではなく、ゴミが入ったままです。ありがとうございました。この当たり前のことに、なぜか気がつかなかった。セルゲイ・デジュブリク 1) 構造体 static PTR<CLASS> CLASS::Ptr が生成される. 2) クラス new CLASS を作成し、コンストラクタ CLASS() を実行し、CLASS::Ptr に Null を代入する。 3) CLASS::Tmp の値は、新しい CLASS へのポインタによって更新される。 4) PTR<CLASS> 構造体 CLASS::Ptr を削除;デストラクタを実行し、CLASS::Ptr を削除しようとする(それは Null である)。ありがとうございます。でも、Nullじゃなくてゴミなんだよね。 Dmitriy Skub 2017.04.25 11:31 #18748 モードがあれば良いと思います。ChartSetInteger( 0,CHART_SHOW,false );モードでは、トレード(エントリー/イグジット)の矢印が表示されませんでした。そこに必要なものはまったくないのです。 Aleksey Mirlachev 2017.04.25 13:51 #18749 私は初心者で、仕事を頼みたいのですが、残高が0になってしまいました。 削除済み 2017.04.25 14:26 #18750 The service is unavailable. バレリアンティンクチャーを買いに行ってきた...( 1...186818691870187118721873187418751876187718781879188018811882...3185 新しいコメント 理由: キャンセル 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
おそらくOnStart()関数の 中で手動で呼び出しているからだと思います。
静的オブジェクトのデストラクタは、この関数の後に宣言と逆の順序で呼び出されます。
おそらくOnStart()関数の 中で手動で呼び出しているからだと思います。
静的オブジェクトのデストラクタは、この関数の後に宣言と逆の順序で呼び出されます。
しかし、漏れは発生する。どこに問題があるのか?
ここでは、すべてが正しく動作する必要があると思います。
しかし、漏れは起きている。どこに問題があるのか?
2つのオブジェクトを作成し、1つだけ削除します。
なぜCLASS::Tmp オブジェクトが必要なのですか?
2つのオブジェクトを作成し、1つだけ削除します。
どの時点で2つのオブジェクトが作成されるのか?
なぜCLASS::Tmp オブジェクトが必要なのですか?
おかげさまで、その必要はありません。しかし、言葉を理解するためには、やはり例によってなぜ漏れが発生するのかを理解したいものです。
隠しコンストラクタを持つ隠しオブジェクトは、場合によっては論理的ですが(おそらく最も浸透しているもの だと思います)。
はい、勘違いしてました。オブジェクトが1つだけ作成され、削除されないのですね。
なぜなら、コンストラクタを呼び出すときに
CLASS::Tmpには、オブジェクトのアドレスではなく、ゴミが入ったままです。
2) クラスが作成され、new CLASSとなり、コンストラクタCLASS()が実行され、CLASS::PtrにNullが代入される。
3) CLASS::Tmp の値は、新しい CLASS へのポインタによって更新される。
4) PTR<CLASS> 構造体 CLASS::Ptr を削除;デストラクタを実行し、CLASS::Ptr を削除しようとする(それは Null である)。
CLASS::Tmpには、オブジェクトのアドレスではなく、ゴミが入ったままです。
ありがとうございました。この当たり前のことに、なぜか気がつかなかった。
1) 構造体 static PTR<CLASS> CLASS::Ptr が生成される.
2) クラス new CLASS を作成し、コンストラクタ CLASS() を実行し、CLASS::Ptr に Null を代入する。
3) CLASS::Tmp の値は、新しい CLASS へのポインタによって更新される。
4) PTR<CLASS> 構造体 CLASS::Ptr を削除;デストラクタを実行し、CLASS::Ptr を削除しようとする(それは Null である)。
ありがとうございます。でも、Nullじゃなくてゴミなんだよね。
モードがあれば良いと思います。
モードでは、トレード(エントリー/イグジット)の矢印が表示されませんでした。そこに必要なものはまったくないのです。