FreeMode

メモリ管理フラグを設定します。

void  FreeMode(
  bool  mode      // 新しいフラグ
  )

パラメータ

mode

[in] メモリ管理フラグの新しい値

戻り値

なし

注意事項

メモリ管理のフラグの設定は CArrayObj クラス使用にあたって重要な部分です。配列要素は動的オブジェクトへのポインタであるため、配列から削除する際にどのように処理するかを決定することが重要です。

フラグが設定されている場合は、配列から除去された際に、要素は自動的に delete オペレータによって削除されます。フラグが設定されていない場合は、削除されたオブジェクトへのポインタがユーザプログラムのどこかに残っていて、後にプログラムによって解放されると想定されています。

ユーザプログラムががメモリ管理フラグをリセットした場合は、ユーザは、プログラムの終了前に配列除去の責任があることを理解する必要があります。さもないと、 new 演算子によって要素に割り当てられたメモリが解放されません。

データが大量の場合、端末の動作が停止することもあります。

ユーザがメモリ管理フラグをリセットしない場合は、別の問題が起こる可能性があります。配列要素ポインタがローカル変数に格納されている場合、配列除去は重大なエラーにつながり、ユーザプログラムが強制停止されます。デフォルトでは、メモリ管理フラグが設定されていて、メモリ要素を解放する責任は配列クラスにあります。

例:

//--- CArrayObj::FreeMode(bool) の例
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
 {
  CArrayObj *array=new CArrayObj;
  //---
  if(array==NULL)
    {
    printf("Object create error");
    return;
    }
  //--- メモリ管理フラグをリセットする
  array.FreeMode(false);
  //--- 配列を使用する
  //--- . にて。.
  //--- 配列を削除する
  delete array;
 }