MQL5におけるOOPに関する質問 - ページ 74 1...676869707172737475767778798081...96 新しいコメント Igor Makanu 2020.06.09 18:38 #731 Vladimir Simakov:ここではポインターはありません)クラスのハンドルはあり、それを扱うのはポインターを扱うのと似ていますが、共通点はそこで終わっています。 私の探究心といたずら好きな手によって、二日二晩、忙しく過ごしました。 動的に生成されたオブジェクトをスコープ外に出す、つまり関数内、手探り状態でやってみましたが、最終的に解決しました。 class CTest { public: ~CTest() { Print(__FUNCTION__); } }; //+------------------------------------------------------------------+ void OnStart() { CTest* _test = new CTest; deleteCTest(_test); } //+------------------------------------------------------------------+ void deleteCTest(CTest* &t) { delete t; } を削除してくれるのですが、このままでは解りません...。そして、ポインタを渡すための類似の関数シグネチャは見つかっていません。 ここでまた質問です。 関数の結果として、オブジェクトへのポインタを参照で返すにはどうすればよいのでしょうか? こんなことをやってみたい CTest ret_CTest() { CTest *result = new CTest; return(result); } CTest * を返すのは問題ないのですが、 ret_CTest() を書くと - エラーに なるのです。 Aleksey Mavrin 2020.06.09 18:44 #732 Igor Makanu:二日二晩、私の探究心といたずら好きな手は、私を忙しくさせた。は、動的に生成されたオブジェクトを スコープ 外に削除することを試みました - 関数の中で、直感的な方法ですが、最終的に解決策にたどり着きました。を削除してくれるのですが、このままでは解りません...。で、ポインタを渡すための類似の関数シグネチャはヘルプやsatに見つかりませんでした。 スコープ外とはどういう意味ですか? 関数に渡したのだから、そこで見えるはずです) s.s.void deleteCTest(CTest* &t) その & がない場合も動作するはずですよね? 作成された範囲外のものを本当に削除するには、場合によっては自動的に削除する必要があります。しっ人聞きの悪いパターンファクトリー...速く読んで削除する... Vladimir Simakov 2020.06.09 18:59 #733 Igor Makanu: が、関数の結果としてオブジェクトへのポインタを参照で返すにはどうしたらいいのでしょうか? であれば問題なくCTest *を返せますが、ret_CTest()を書くと - エラーに なります。 コーシャを希望する場合CTest& Foo(); 、まだですが、その場合はCTest Foo(); 。 もしクラスがコピーコンストラクタを持つなら、そのクラスはコピーコンストラクタを持つべきでしょう。CTest(CTest &other)... Igor Makanu 2020.06.09 19:01 #734 Aleksey Mavrin:s.w.void deleteCTest(CTest* &t) これなし & も動作するはず、またはない? 新しい発見があるかもしれませんよ。) 何度も書きますが、MQLのポインターはとても勉強になるものです :))) Vladimir Simakov: コーシャが欲しいならまだしも、そうであれば。 ポインターを使用する場合は、クラスがコピーコンストラクタを持っている必要があります。 もう一度、考える必要がある GetPointer() で何か仕掛けがあるのではと勘ぐってしまいますが...。が、事実ではないので......。MQLのポインタと暗黙のデリファレンスによる「空間と時間のジャンプ」は、私の頭から離れないのです。((( Vladimir Simakov 2020.06.09 19:05 #735 Igor Makanu:チェックしてみてください、勉強になりますよ ;)何度も書きますが、MQLのポインターは非常に勉強になるものです ))) ポインターは削除されますが、_testに新しい値を代入することはできません。ちなみに、MQLは関係ありません))) Vladimir Simakov 2020.06.09 19:06 #736 Igor Makanu:チェックしてみてください、勉強になりますよ ;)MQLのポインタはとても勉強になると何度も言っているのですが ))))もう一度、考える必要があるGetPointer()で何か仕掛けがあるのではと勘ぐってしまいますが...。が、事実ではないので......。MQLのポインタと暗黙のデリファレンスによる「空間と時間のジャンプ」は、私の頭から離れないのです。((( ここは大丈夫です)))シャープをオフにするだけで、ここにはその気配すらない)))) Aleksey Mavrin 2020.06.09 19:13 #737 Igor Makanu:チェックしてみてください、勉強になりますよ ;)MQLのポインタはとても勉強になると何度も言っているのですが )))) 確認しました。を使わなくてもよく削除される) MT4とMT5で試して比較してみました ) class CTest { public: CTest() { Print(__FUNCTION__); } ~CTest() { Print(__FUNCTION__); } }; //+------------------------------------------------------------------+ void OnStart() { CTest* _test = new CTest(); deleteCTest(_test); } //+------------------------------------------------------------------+ void deleteCTest(CTest* t) { delete t; } Igor Makanu 2020.06.09 19:20 #738 Aleksey Mavrin:よく調べました。を使わずに完璧に削除します)MT4とMT5で試して比較してみました ) 完全な例ではありませんが、私は今日、このようなことに遭遇しました。 がないと動作しません。 class CTest { public: ~CTest() { Print(__FUNCTION__); } }; //+------------------------------------------------------------------+ void OnStart() { CTest* _test = new CTest; deleteCTest(_test); delete _test; } //+------------------------------------------------------------------+ void deleteCTest(CTest* & t) { delete t; t = new CTest; } //+------------------------------------------------------------------+ ウラジミール・シマコフ: 私はここで大丈夫です)))シャープが欲しいわけではありませんが、&)) がなくても大丈夫だと思います。 シャープは求めていない、まだMQLを扱っている、わからないことは聞くかもしれない。 Vladimir Simakov 2020.06.09 19:33 #739 Igor Makanu:は完全な例ではなく、今日出会った。がないと、そうはいかない。 もちろん、そうなります。ポインターを値で渡しているため、ポインターのコピーが作成されます。それを通してオブジェクトを釘付けにし、関数内で作成されたポインタのために新しいオブジェクトを作成するのです。これはc++です、ようこそ)))。 Aleksey Mavrin 2020.06.09 19:43 #740 Igor Makanu:は完全な例ではなく、今日出会った。がないと動きません。 私見では、参照とは関係なく、関数 実行後に値を保存したい場合は、関数の引数を ポインタで渡す必要があるというだけです。 参照でないファイルやインジケータ・ハンドルでも同じことが起こります。 漠然と覚えているだけでずいぶん時間が経っているが、C++では常にこれが標準だった。 1...676869707172737475767778798081...96 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
ここではポインターはありません)クラスのハンドルはあり、それを扱うのはポインターを扱うのと似ていますが、共通点はそこで終わっています。
私の探究心といたずら好きな手によって、二日二晩、忙しく過ごしました。
動的に生成されたオブジェクトをスコープ外に出す、つまり関数内、手探り状態でやってみましたが、最終的に解決しました。
を削除してくれるのですが、このままでは解りません...。そして、ポインタを渡すための類似の関数シグネチャは見つかっていません。
ここでまた質問です。
関数の結果として、オブジェクトへのポインタを参照で返すにはどうすればよいのでしょうか?
こんなことをやってみたい
CTest * を返すのは問題ないのですが、 ret_CTest() を書くと - エラーに なるのです。
二日二晩、私の探究心といたずら好きな手は、私を忙しくさせた。
は、動的に生成されたオブジェクトを スコープ 外に削除することを試みました - 関数の中で、直感的な方法ですが、最終的に解決策にたどり着きました。
を削除してくれるのですが、このままでは解りません...。で、ポインタを渡すための類似の関数シグネチャはヘルプやsatに見つかりませんでした。
スコープ外とはどういう意味ですか? 関数に渡したのだから、そこで見えるはずです)
s.s.void deleteCTest(CTest* &t) その & がない場合も動作するはずですよね?
作成された範囲外のものを本当に削除するには、場合によっては自動的に削除する必要があります。しっ人聞きの悪いパターンファクトリー...速く読んで削除する...
Igor Makanu:
が、関数の結果としてオブジェクトへのポインタを参照で返すにはどうしたらいいのでしょうか?
であれば問題なくCTest *を返せますが、ret_CTest()を書くと - エラーに なります。もしクラスがコピーコンストラクタを持つなら、そのクラスはコピーコンストラクタを持つべきでしょう。
s.w.void deleteCTest(CTest* &t) これなし & も動作するはず、またはない?
新しい発見があるかもしれませんよ。)
何度も書きますが、MQLのポインターはとても勉強になるものです :)))
コーシャが欲しいならまだしも、そうであれば。
ポインターを使用する場合は、クラスがコピーコンストラクタを持っている必要があります。
もう一度、考える必要がある
GetPointer() で何か仕掛けがあるのではと勘ぐってしまいますが...。が、事実ではないので......。MQLのポインタと暗黙のデリファレンスによる「空間と時間のジャンプ」は、私の頭から離れないのです。(((
チェックしてみてください、勉強になりますよ ;)
何度も書きますが、MQLのポインターは非常に勉強になるものです )))
ポインターは削除されますが、_testに新しい値を代入することはできません。ちなみに、MQLは関係ありません)))
チェックしてみてください、勉強になりますよ ;)
MQLのポインタはとても勉強になると何度も言っているのですが ))))
もう一度、考える必要がある
GetPointer()で何か仕掛けがあるのではと勘ぐってしまいますが...。が、事実ではないので......。MQLのポインタと暗黙のデリファレンスによる「空間と時間のジャンプ」は、私の頭から離れないのです。(((
ここは大丈夫です)))シャープをオフにするだけで、ここにはその気配すらない))))
チェックしてみてください、勉強になりますよ ;)
MQLのポインタはとても勉強になると何度も言っているのですが ))))
確認しました。を使わなくてもよく削除される)
MT4とMT5で試して比較してみました )
よく調べました。を使わずに完璧に削除します)
MT4とMT5で試して比較してみました )
完全な例ではありませんが、私は今日、このようなことに遭遇しました。
がないと動作しません。
私はここで大丈夫です)))シャープが欲しいわけではありませんが、&)) がなくても大丈夫だと思います。
シャープは求めていない、まだMQLを扱っている、わからないことは聞くかもしれない。
は完全な例ではなく、今日出会った。
がないと、そうはいかない。
は完全な例ではなく、今日出会った。
がないと動きません。
私見では、参照とは関係なく、関数 実行後に値を保存したい場合は、関数の引数を ポインタで渡す必要があるというだけです。 参照でないファイルやインジケータ・ハンドルでも同じことが起こります。
漠然と覚えているだけでずいぶん時間が経っているが、C++では常にこれが標準だった。