2015年12月1日火曜日

[MTプログラミング]小ネタ MT4 Build920でクラス継承のチェックが厳しくなりました。

バックテストを流していると、MT4が基本使えないし、PCも重いため、微妙にネタ作りに困ります^^;;; もう一個ぐらいMT4入れておけっていう話かもしれませんが。

ということで、今日は小ネタです。

MT4 Build920がリリースされています。メモリ使用の効率化やバグフィックス、バックテストを繰り返していると動作が極端に重たくなる件などが対応されていますが、しれっとMQLでのクラス継承時のセキュリティチェックが厳しくなっています。

class CInheritance : CBase
{
}

というクラスに対して
CInheritance *cls = new CInheritance();
CBase* *clsBase = (CBase*)cls ;   //(*1)

というコードがBuild 910まではビルドが通っていました。

ところが、Build920からはビルドが通りません。

class CInheritance : CBase
{
}
という宣言は、C++でいうところのプライベート継承というやつで、本来、Cinheritanceを使用する側からはCBaseは完全に隠ぺいされていないと行けません。

ところがMQLでは、隠ぺい化されずに型キャストが可能な状態になっていました。

これがBuild920からは、(*1)の部分でコンパイルエラーが発生するようになっています。

正しくpublic継承を行う必要があります。こんな感じです。

class CInheritance : public CBase
{
}

突如ビルドが通らなくなって、少し焦りましたが、考えてみると単純な記述漏れってやつでした^^;;いままでがあいまい過ぎたところを正しくしたというやつですね。

ブログランキングにご協力よろしくお願いいたしますm(_ _ )m
にほんブログ村 為替ブログへ
にほんブログ村