エラー、バグ、質問 - ページ 1874 1...186718681869187018711872187318741875187618771878187918801881...3185 新しいコメント fxsaber 2017.04.25 06:19 #18731 Koldun Zloy:コンストラクタがprivateでなければならないことが確実であれば、他に方法はありません。スマートポインターは、単純なポインターを含むオブジェクトで、時間内に削除されることを保証するものです。これは最もシンプルな選択肢です。もっと複雑なスマートポインターもあります。この本には、それらについてとてもよく書かれています。https://rsdn.org/res/book/cpp/cpp_real_programmers.xml。 ありがとうございました。さまざまなバリエーションを試したが、うまくいかない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 CLASS* Tmp; static PTR<CLASS> Ptr; CLASS() { CLASS::Ptr = CLASS::Tmp; } }; static CLASS* CLASS::Tmp = new CLASS; static PTR<CLASS> CLASS::Ptr; void OnStart() { }実のところ、うまくいかないのは論理的なことなのです。スマートポインタのデストラクタをクラスのデストラクタの 前に呼ばせることはできません。 fxsaber 2017.04.25 07:05 #18732 コンパイラは、エラーとその発生場所を特定する代わりに、不特定の内部エラー #112 を出します。class CLASS {}; template <typename T> class CLASS2 { public: static void Func() {} }; void OnStart() { CLASS2<CLASS>::Func; } Koldun Zloy 2017.04.25 07:22 #18733 fxsaber: ありがとうございました。いろいろなバリエーションを試しましたが、うまくいきません。実は、うまくいかないのは論理的なことなんです。スマートポインタのデストラクタをクラスのデストラクタの 前に呼ばせることはできません。 次の方法を試してみてください。template < typename T > struct PTR { T* Ptr; PTR( T* Value ) : Ptr( Value ) { } ~PTR() { Print(__FUNCSIG__); delete Ptr; } }; class CLASS { private: static PTR< CLASS > Ptr; public: CLASS() { Print(__FUNCSIG__); } ~CLASS() { Print(__FUNCSIG__); } }; static PTR< CLASS > CLASS::Ptr( new CLASS ); void OnStart() { } 何をやっているのかわかりませんが、MQLではコンストラクタをprivateにすることはシングルトンに対してのみ意味があるのです。 fxsaber 2017.04.25 07:53 #18734 Koldun Zloy:この方法で試してみてください。詳細な例をありがとうございました残念ながら、閉じたコンストラクタは持っていません。もちろん、クローズドではそうもいきません。必要なのは、誰からも見えないモノが存在することです。同時に、この種のオブジェクトは他に一切作ることができない。 fxsaber 2017.04.25 08:12 #18735 このような場合、正しいのでしょうかclass CLASS { public: ~CLASS() { static bool FirstRun = true; if (FirstRun && CheckPointer(&this) == POINTER_DYNAMIC) { FirstRun = false; delete &this; } Print(__FUNCSIG__); } }; void OnStart() { CLASS* Class = new CLASS; delete Class; } を実行ログに出力するには?void CLASS::~CLASS() void CLASS::~CLASS() delete invalid pointerまた、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を与えるということでよろしいでしょうか? fxsaber 2017.04.25 08:34 #18736 Koldun Zloy:この方法で試してみてください。 スマートポインタのデストラクタが、あなたのバージョンではクラスのデストラクタの 前に呼ばれるのに、私のバージョンでは(コンストラクタがパブリックであるにもかかわらず)その逆になっているのはなぜですか? Koldun Zloy 2017.04.25 09:06 #18737 fxsaber:誰からも見えないモノが必要なんです。同時に、このタイプの別のオブジェクトは、どのような方法でも作成することはできなかった。 というものです。"Singleton"です。なぜ、自分に合わないと言うのか?以下は、シングルトンの例である。template < typename T > struct PTR { T* Ptr; PTR() : Ptr( NULL ){} PTR( T* ptr ) : Ptr( ptr ) { } ~PTR() { Print(__FUNCSIG__); if( Ptr )delete Ptr; } void Set( T* ptr ) { Ptr = ptr; } }; class CLASS { static PTR< CLASS > sPtr; CLASS() { Print(__FUNCSIG__); } public: ~CLASS() { Print(__FUNCSIG__); } static CLASS* GetPtr() { if( !sPtr.Ptr ){ sPtr.Set( new CLASS ); } return sPtr.Ptr; } }; static PTR< CLASS > CLASS::sPtr; void OnStart() { CLASS* ptr = CLASS::GetPtr(); } Koldun Zloy 2017.04.25 09:07 #18738 fxsaber: このような場合、正しいのでしょうか を実行ログに出力するには?また、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を与えるということでよろしいでしょうか? ネバー・ドゥdelete &this; Sergey Dzyublik 2017.04.25 09:23 #18739 fxsaber: このような場合、実行ログに出力してよいのでしょうか。また、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を出力するということでよろしいでしょうか? はい、そうです。 fxsaber 2017.04.25 09:32 #18740 Koldun Zloy: というものです。"Singleton"です。なぜ似合わないと言うのですか?以下は、シングルトンの例です。ありがとうございました!うまくいきましたtemplate < typename T > struct PTR { T* Ptr; PTR( void ) : Ptr(NULL) { } PTR( T* ptr ) : Ptr(ptr) { } ~PTR( void ) { if (this.Ptr) delete this.Ptr; } bool Set( T* ptr ) { this.Ptr = ptr; return(true); } void operator =( bool ) { } }; class CLASS { private: static PTR<CLASS> sPtr; CLASS() { } public: static bool Set() { return(CLASS::sPtr.Ptr ? false : CLASS::sPtr.Set(new CLASS)); } }; static PTR<CLASS> CLASS::sPtr = CLASS::Set(); void OnStart() { }しかし、まだ謎のままです。 トレーディング、自動売買システム、ストラテジーテストに関するフォーラム バグ、バグ、質問 fxsaber さん 2017.04.25 10:34 スマートポインタのデストラクタが、あなたのバージョンではクラスのデストラクタの 前に呼ばれ、私のバージョンでは逆になっているのはなぜですか(たとえコンストラクタがパブリックであっても)? 1...186718681869187018711872187318741875187618771878187918801881...3185 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
コンストラクタがprivateでなければならないことが確実であれば、他に方法はありません。
スマートポインターは、単純なポインターを含むオブジェクトで、時間内に削除されることを保証するものです。
これは最もシンプルな選択肢です。
もっと複雑なスマートポインターもあります。
この本には、それらについてとてもよく書かれています。https://rsdn.org/res/book/cpp/cpp_real_programmers.xml。
実のところ、うまくいかないのは論理的なことなのです。スマートポインタのデストラクタをクラスのデストラクタの 前に呼ばせることはできません。
コンパイラは、エラーとその発生場所を特定する代わりに、不特定の内部エラー #112 を出します。
ありがとうございました。いろいろなバリエーションを試しましたが、うまくいきません。
実は、うまくいかないのは論理的なことなんです。スマートポインタのデストラクタをクラスのデストラクタの 前に呼ばせることはできません。
次の方法を試してみてください。
何をやっているのかわかりませんが、MQLではコンストラクタをprivateにすることはシングルトンに対してのみ意味があるのです。
この方法で試してみてください。
詳細な例をありがとうございました残念ながら、閉じたコンストラクタは持っていません。もちろん、クローズドではそうもいきません。
必要なのは、誰からも見えないモノが存在することです。同時に、この種のオブジェクトは他に一切作ることができない。
を実行ログに出力するには?
また、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を与えるということでよろしいでしょうか?
この方法で試してみてください。
誰からも見えないモノが必要なんです。同時に、このタイプの別のオブジェクトは、どのような方法でも作成することはできなかった。
というものです。"Singleton"です。
なぜ、自分に合わないと言うのか?
以下は、シングルトンの例である。
このような場合、正しいのでしょうか
を実行ログに出力するには?
また、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を与えるということでよろしいでしょうか?
ネバー・ドゥ
このような場合、実行ログに出力してよいのでしょうか。
また、コンストラクタ/デストラクタの __FUNCSIG__ は void 型を出力するということでよろしいでしょうか?
はい、そうです。
というものです。"Singleton"です。
なぜ似合わないと言うのですか?
以下は、シングルトンの例です。
ありがとうございました!うまくいきました
しかし、まだ謎のままです。
トレーディング、自動売買システム、ストラテジーテストに関するフォーラム
バグ、バグ、質問
fxsaber さん 2017.04.25 10:34
スマートポインタのデストラクタが、あなたのバージョンではクラスのデストラクタの 前に呼ばれ、私のバージョンでは逆になっているのはなぜですか(たとえコンストラクタがパブリックであっても)?