【MQL5】delete 演算子について

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

delete演算子とは?

delete演算子は、new演算子で作成されたオブジェクトを解除し、オブジェクトによって占有されていたメモリを解放します。削除操作が実行された後、オブジェクト記述子は無効になります。

MQL5オブジェクトポインタは、実際にはオブジェクト記述子と呼ばれます。これは、オブジェクトのメモリ上の場所を直接指すポインタではなく、オブジェクトを一意に識別するためのハンドルのようなものです。

これにより、メモリリーク(使い終わったメモリが解放されずに無駄に消費され続けること)を防ぎ、プログラムのパフォーマンスが向上します。

delete演算子の基本構文

delete演算子の基本構文は次の通りです。

delete pointer;

ここで、pointerは解放するメモリを指すオブジェクト記述子(オブジェクトを一意に識別するためのハンドルのようなもの)です。delete演算子を使うことで、この記述子が指しているメモリが解放されます。削除操作が実行された後、オブジェクト記述子は無効になります。

使用例

次に、delete演算子を使用した例を示します。

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

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

この例では、SampleClassのオブジェクトが動的に作成され、使用後にdelete演算子メモリが解放されています。解放後、ポインタをNULLに設定しているのは、安全のためです。

delete演算子を使う際の注意点

オブジェクトポインタメモリアドレスではなく、オブジェクト記述子(オブジェクトを操作するための情報)である点に注意が必要です。オブジェクトを削除する際には、ポインタがNULLでないことを確認することが推奨されます。ポインタのチェックにはCheckPointer関数を使用できます。

delete演算子を使ったサンプルコード

以下に、delete演算子を使用して動的に確保されたメモリを解放するサンプルコードを示します。

// サンプルクラスの定義
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");

    // オブジェクトの使用
    Print("Number: ", sampleObject.number);
    Print("Text: ", sampleObject.text);

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

この例では、SampleClassのオブジェクトが動的に作成され、使用後にdelete演算子メモリが解放されています。解放後、ポインタをNULLに設定することで安全性が高まります。

以上が、delete演算子についての詳細な解説です。delete演算子を正しく使用することで、プログラムのメモリ管理が適切に行われ、メモリリークやクラッシュを防ぐことができます。
<参照>

new演算子

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