【MQL5】CheckPointer関数について

MQL5リファレンス
スポンサーリンク

CheckPointer関数の働き・役割

CheckPointer関数は、オブジェクトポインタの型をチェックし、その有効性を確認するために使用されます。この関数を使用することで、無効なポインタによるプログラムの緊急終了を防止します。

CheckPointer関数の引数について

CheckPointer関数は、1つの引数引数を取ります。関数名と引数の構成は以下の通りです。

ENUM_POINTER_TYPE CheckPointer(
    object* anyobject    // オブジェクトポインタ
);

引数

CheckPointer関数の戻り値について

CheckPointer関数は、ENUM_POINTER_TYPE列挙のいずれかの値を返します。以下に主な値を示します。

ENUM_POINTER_TYPE列挙について

CheckPointer関数は、オブジェクトポインタの型をチェックするのに使用されます。この関数は、ENUM_POINTER_TYPE列挙のいずれかの値を返します。不正なポインタが使用されると、プログラムの実行が直ちに終了されます。

POINTER_INVALID

不正ポインタ。例えば、ポインタがNULLの場合や、オブジェクトがdelete演算子で削除された後のポインタです。

POINTER_DYNAMIC

new演算子で作成されたオブジェクトのポインタ。このようなポインタにはdelete演算子が使用されます。

POINTER_AUTOMATIC

自動的に(new演算子を使用せずに)作成されたオブジェクトのポインタ。このようなオブジェクトは使用後に自動的に削除されます。例えば、ローカル変数または関数引数として宣言されたオブジェクトへのポインタなどが挙げられます。

CheckPointer関数を使う際の注意点

不正なポインタを使用するとプログラムが緊急終了するため、ポインタを使用する前にCheckPointer関数を呼び出す必要があります。ポインタがNULLであったり、オブジェクトがdelete演算子で削除された場合、ポインタは無効と見なされます。

CheckPointer関数を使ったサンプルコード

以下に、CheckPointer関数を使用してポインタの有効性を確認するサンプルコードを示します。

// サンプルクラスの定義
class SampleClass
{
public:
    int number;
    string text;

    // コンストラクタ
    SampleClass(int num, string txt)
    {
        number = num;
        text = txt;
    }
};

// OnStart関数
void OnStart()
{
    // オブジェクトを動的に作成
    SampleClass *sampleObject = new SampleClass(10, "example");

    // ポインタの有効性を確認
    if (CheckPointer(sampleObject) != POINTER_INVALID)
    {
        Print("ポインタは有効です。");
    }
    else
    {
        Print("ポインタは無効です。");
    }

    // 使用後にオブジェクトを削除
    delete sampleObject;
    sampleObject = NULL;

    // ポインタの有効性を再度確認
    if (CheckPointer(sampleObject) != POINTER_INVALID)
    {
        Print("ポインタは有効です。");
    }
    else
    {
        Print("ポインタは無効です。");
    }
}

この例では、SampleClassのオブジェクトが動的に作成され、ポインタの有効性がCheckPointer関数で確認されています。オブジェクトの使用後にdelete演算子メモリを解放し、ポインタをNULLに設定した後、再度ポインタの有効性が確認されます。これにより、安全なメモリアクセスが確保されます。

また、ポインタを素早く検証するためには、CheckPointer関数を明示的に呼び出さずに、「!」演算子を使用することもできます。「!」演算子は、論理否定演算子とも呼ばれ、条件がfalseの場合にtrueを返し、trueの場合にfalseを返します。MQL5では、「!」演算子を使ってポインタの有効性を簡単にチェックできます。具体的には、以下のように使用します。

// ポインタの有効性を「!」演算子で確認
if (!sampleObject)
{
    Print("ポインタは無効です。");
}
else
{
    Print("ポインタは有効です。");
}

このように、「!」演算子を使用することで、ポインタがNULLであるかどうかを迅速に確認できます。ポインタが無効である場合(つまりNULLの場合)、条件はtrueとなり、「ポインタは無効です。」というメッセージが出力されます。ポインタが有効である場合、条件はfalseとなり、「ポインタは有効です。」というメッセージが出力されます。

タイトルとURLをコピーしました