ということで、今日は小ネタです。
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


にほんブログ村