void f()
{
for ( int i = 0;; )
{
Print( i );
int i = 5; //Warning: declaration of 'i' hides local declarationPrint( i );
break;
}
}
void For( int i = 0 )
{
Print( i );
int i = 5; //Error: redefinition of formal parameter 'i'Print( i );
}
class A
{
public :
A() { Print("Start"); };
~A() {
Print("End");
Print(EnumToString(CheckPointer(GetPointer(this))));
if (CheckPointer(GetPointer(this))!=POINTER_DYNAMIC)
deleteGetPointer(this);};
};
A a;
voidOnStart()
{
}
2018.09.2321:46:42.960 Test_CheckPointer (EURUSD,M1) Start
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 1 undeleted objects left
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 1 object of type A left
2018.09.2321:46:42.961 Test_CheckPointer (EURUSD,M1) 32 bytes of leaked memory
問題はないのですが...。がエラーになります。また、なぜ説明を引っ張り出そうとするのかも理解できません。 デフォルトのPrintには、以下のような署名があります。
また、(必要に応じて)他の機能とぶつかることもある
印刷署名がMQL5言語の 範囲外です。MQL5でPrintのオーバーロードが一切禁止されても、バグにはならないでしょう。
この「バグ」でTSが作れなくなり、書き込み松葉杖が必要な状態にならないことを祈ります。
テスターの性能を測定してみました。そのために、1ティックごとにポジションを建てたり、閉じたりしています。100ティックの実行時間を計測してみました。100 000ティックを走らせました。合計1000ティックを計測しました。こんなグラフができました
その間にほぼ等間隔で減速のスパイクがある。最適化モードで測定してみました。このスパイクを無視すると、テスターの性能は一定の値ではなく、25%変動します。またWindowsのスピード測光のトリックかもしれませんね。
ZZZ MT4で同じコードが動いています。
MT4 TesterはMT5と比較して、1ティックの処理に平均で1.5~2倍の時間を要します。
遺伝的 最適化アルゴリズムの 使用により急増する可能性。
MT4-TesterはMT5と比較して、平均して1ティックの処理に1.5~2倍の時間を要します。
遺伝的 最適化アルゴリズムの 使用により急増する可能性。
GAなし。1つのエージェントで2つのパスから最適化。
そして、これはもう純粋な操作であり、ミスリードである。
ソースコードはちゃんとある。
一方は警告、もう一方はエラー
根本的な違いは何でしょうか?例えばC++の場合、どちらのケースでもエラーが発生します
クラスインスタンスへのポインタの問題を理解するために、知識のある人たちに助けを求めています。私には理解できない。
以下は、そのスクリプトの例です。
実行すると、予想通りです。
と宣言されている場合、そのクラスのインスタンスは
A *a= new A;
であれば、実行時に私たちは
つまり、デストラクタが起動さえしていないため、メモリが解放されないのです。
しかし、あるクラスのインスタンスが宣言された場合。
A a= new A;
コンストラクタは2回、デストラクタは1回起動されますが、メモリは解放されず、POINTER_AUTOMATIC オブジェクトポインタ型になります(POINTER_DYNAMICに するつもりだったのですが)。
デストラクタを常に実行し、deleteを正しく実行する方法
Как добиться всегда выполнения деструктора и правильного выполнения delete.
C++からスマートポインタの話題を参照し、MQLに適応する(https://habr.com/post/140222/)。
kodobaseに何かあるのかも・・・。
C++からスマートポインタの話題を参照し、MQLに適応してください(https://habr.com/post/140222/)。
kodobaseに何かあるのかも・・・。
ありがとうございます、でも私の質問に対する答えはそこにありませんでした。
A *a= new A のとき、デストラクタが呼ばれないのはなぜか。
ありがとうございました。しかし、そこには私の疑問に対する答えはありませんでした。
A *a= new A のとき、デストラクタが呼ばれないのはなぜか。
結果
1:pointer_automatic
1:ポインターダイナミック
2:ポインターダイナミック
2:ポインターオートマチック
ありがとうございました。しかし、そこには私の疑問に対する答えはありませんでした。
A *a= new A のとき、なぜデストラクタが呼ばれないのか理解できない。
newで 作成、deleteで 削除