mql5言語の特徴、微妙なニュアンスとテクニック - ページ 213

 
A100 #:

そして、既存の関数の動作を変更する必要はありません。新しい正しい関数を (何らかのプレフィックス/サフィックスを付けて)追加 し、それに対応する警告で以前の関数の廃止を宣言するだけで十分です。

FileReadArrayのセンスを全壊?これらの機能は、記憶の断片をバックアップするものと考えてください。バイトでいい。

 
fxsaber #:

FileReadArrayの全ポイントを破壊する?これらの機能は、記憶の断片をバックアップするものと考えてください。バイトでいい。

つまり、まずプライベート、コンストによって自分で困難を作り出し、それを「ダイレクト」メモリーアクセスによって英雄的に乗り越えようということですか?

私は別のアプローチを持っています。もしそのようなニーズが発生するならば、それはプログラムが最初から不適切に設計されていたことを意味します。

 
A100 #:

つまり、あなたは、まず、私的な、制約された、自分にとって困難な状況を作り出すことを提案します。

いつもプライベート/コンストで大きな収穫を得ています。プログラムのアーキテクチャをうまくコントロールすることができるのです。

を、「ダイレクト」メモリーアクセスで雄々しく乗り越えていく?

克服はしない。すべてが非常にシンプルでロジカルです。

私の考え方は違います。もしそのようなニーズがあるとすれば、それはプログラムの設計が最初から間違っていたことを意味します。

OOPの「純粋性」のために、アーキテクチャ上の利便性を奪い、すべてをヒープで(private/constなしで)書く覚悟があるのだと理解しています。

 
Ilyas #:

ファイル...は、プライバシーと不変性が存在しなかったときに登場しました。私たちは、この行動を重要視していないので、まだ変えようとは思っていません。

最近、CharArray<->Structが登場しましたが、これらはprivate/constで問題なく動作します。改訂されないことを祈る。

 
コードをきれいにするために、シリアライズとデシリアライズのメソッドは、構造体に対して書かれるべきです。そして、定数フィールドは、デシリアライゼーション中に変更可能であれば、定数ではありません。
 
fxsaber #:

あなたは、OOPの「純粋さ」のために、アーキテクチャの制御の利便性を奪って、すべてをヒープで(private/constなしで)書く覚悟があると理解しています。

オブジェクトは自己完結している(外部関数を必要としない)ので、privateと矛盾することはないのです。また、コンストと競合する場合は、正しく指摘されているように

人為的にそうさせたのは、あなた方です。
 
fxsaber #:

純粋な」OOPのために、アーキテクチャの制御の利便性を奪って、すべてをヒープで(private/constなしで)書く覚悟があることは理解できます。

便利ではないが安全な正規の方法を使う代わりに、利便性からダイレクトメモリアクセスの抜け穴を喜んで使うのです。

 
TheXpert #:

便利ではないけれど安全な正規の方法を使う代わりに、便利だからとダイレクトメモリアクセスの抜け穴を喜んで使っている。

要望は2つ。

  1. 構造体の保存と読み込みのコードを表示 します。
  2. 非正規の危険性を示す一例。
 

まあ、激しいバグですね。例

class C{
   static uint count;
   const uint number;
public:
   C():number(++count){PrintFormat("C[%i]",number);}
  ~C(){PrintFormat("~C[%i]",number);}
   uint Number() const {return number;}
};
uint C::count=0;

void OnStart()
{
  C c[3]={};
  for(int i=0;i<ArraySize(c);Print(c[i++].Number()));
}
2021.11.18 16:03:31.424 test (EURUSD,M1)        0
2021.11.18 16:03:31.424 test (EURUSD,M1)        0
2021.11.18 16:03:31.424 test (EURUSD,M1)        0
2021.11.18 16:03:31.424 test (EURUSD,M1)        ~C[0]
2021.11.18 16:03:31.424 test (EURUSD,M1)        ~C[0]
2021.11.18 16:03:31.424 test (EURUSD,M1)        ~C[0]

メモリが確保され、解放されるときにデストラクタが呼ばれるが(これはRAIIによれば期待される動作のヒントとなる)、オブジェクトの生成 時にコンストラクタが呼ばれることは忘れられている))。

 
理由: