MQL5におけるOOPに関する質問 - ページ 5

 
 
Vladimir Simakov:
いつも使っているんだ。

どこで、どのように?

司会者、何度も質問してすみません。どうしても答えを出したいのです。

 
Artyom Trishkin:

なぜ関数に渡された ポインタを 意図的に再割り当て するのでしょうか?もちろん、リークもあるでしょう。しかし、これは「古典的なリーク」ではなく、オブジェクトへのポインタを扱う際の古典的なエラーである。

ここでは新しいオブジェクトを作成する必要はなく、関数に渡されたポインタの外部オブジェクトを処理します。

これは私ではありません。このスレッドにある誰かのコードから引用しています。例として取り上げられています。
 
Dmitry Fedoseev:

どこで、どのように?

司会者、何度も質問してすみません。どうしても答えを出したいのです。

我慢すること。帰ってから投稿します。
 
Dmitry Fedoseev:

どこで、どのように?

司会者、何度も質問してすみません。どうしても答えを出したいのです。

質問を正しく理解すれば、newを使ってクラスをオブジェクトとして宣言します。
そして、作成したオブジェクト を通してクラスのパブリックメソッドを呼び出すポイントを使用します。
呼び出されたすべてのメソッドが実行された後、作成されたオブジェクトを削除することでメモリをクリアする delete。

 
Roman:

もし私が質問を正しく理解していれば、newを使ってクラスをオブジェクトとして宣言しています。
そして、作成したオブジェクト を通じて、クラスのパブリックメソッドをドットで呼び出します。
呼び出されたすべてのメソッドが実行された後、作成されたオブジェクトを削除することでメモリをクリアする delete。

いや、そうではない。最初は、このように関数のパラメータ-オブジェクトだが参照ではない-かと思ったのですが、最後にセミコロンがありますね。宣言時に普通にオブジェクトを生成しているのであれば、なぜ括弧書きになっているのでしょうか?だから、今のところ、世紀の謎として残っているのです。

 
Dmitry Fedoseev:

いや、そうではない。最初は、このように関数のパラメータ-オブジェクトだが参照ではない-かと思ったのですが、最後にセミコロンがありますね。宣言時に普通にオブジェクトを生成しているのであれば、なぜ括弧書きになっているのでしょうか?だから、今のところ、世紀の謎として残っているのです。

括弧内-本文の注釈であるため))))
 
Artyom Trishkin:

また、なぜ関数に渡された ポインタを 意図的に再代入 したのでしょうか?もちろん、リークもあるでしょう。しかし、これは「古典的なリーク」ではなく、オブジェクトへのポインタを扱うという古典的なエラーなのです。

ここでは新しいオブジェクトを作成する必要はなく、関数に渡されたポインタの外部オブジェクトを処理します。

私の例のことではなく、MQLにおけるポインタそのものの実装のことです。もし、ポインタを参照解除する必要がなければ(そしてポインタはオブジェクトのインスタンスに割り当てることができる!)、ポインタを渡す代わりにオブジェクトへの参照を渡すことができるのであればhttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665

ここでは、(CObj& obj)がいつどこで出現したかについての詳細な情報はありません(&はポインタのデリファレンス操作ではなく、ポインタの獲得 GetPointer() です)。

OK、情報を無駄にしたくないので...。MQLはC++ではない、そう実装されているのだ、そう自分に言い聞かせ、このフォーラムでもう一度繰り返します。

 
Igor Makanu:

私の例のことではなく、MQLにおけるポインタそのものの実装のことです。もし、ポインタを参照解除する必要がなければ(そしてポインタはオブジェクトのインスタンスに割り当てることができる!)、ポインタを渡す代わりにオブジェクトへの参照を渡すことができるのであればhttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665

ここでは、(CObj& obj)がいつどこで出現したかについての詳細な情報はありません(&はポインタのデリファレンス操作ではなく、ポインタの獲得 GetPointer() です)。

OK、情報を無駄にしたくないので...。MQLはC++ではない、そう実装されているのだ、そう自分に言い聞かせ、このフォーラムでもう一度繰り返します。

大げさに言うと、複雑で混乱するようなことはないんですね。

 
Vladimir Simakov:
括弧は本文の注釈であるため))))

それでは、どうぞ。

こんな感じ。

void z(CObj * o){
}

できるどころか、もっといい、こう呼べばいいんだから。

CObj obj;
z(GetPointer(obj));

ポインタを参照渡しする場合、ポインタのために別の変数が必要になります。

***

また、関数内でオブジェクトを生成するためにポインタを渡す必要がある場合は、このようにします。

class CObj{
   public:
   int f(){
      return(33);
   }
};

CObj * obj;

void OnStart(){
  z(obj);
  delete(obj);
}

void z(CObj & o){
   o = new CObj();
}
以上、基本的にOOPについて知りたかったけど、怖くて聞けなかったことをまとめてみました)))