AddArray

配列の最後に別の配列の要素を追加します。

bool  AddArray(
  const CArrayObj *  src      // ソース配列へのポインタ
  )

パラメータ

src

[in] 追加する要素へのポインタ(CArrayDouble クラスインスタンス)

戻り値

成功の場合は true、要素が追加できなかった場合は false

注意事項

配列への配列要素の追加は、実際にはポインタのコピーです。 そのため、メソッドを呼び出す時に、 複数の変数に動的オブジェクトへのポインタが存在する可能性があります。

//--- 例
extern bool       make_error;
extern int        error;
extern CArrayObj *src;
//--- CArrayObj の新しいインスタンスを作成する
//--- デフォルトのメモリ管理が有効
CArrayObj *array=new CArrayObj;
//--- ソース配列の要素を追加(コピー)する
if(array!=NULL)
  bool result=array.AddArray(src);
if(make_error)
 {
  //--- 不正なアクションを取る
  switch(error)
    {
    case 0:
        //--- メモリ管理のフラグをチェックしないでソース配列を削除する
        delete src;
        //--- 結果:
        //--- 受け取り側の配列での不正なポインタでの要素アドレス指定が可能
        break;
    case 1:
        //--- ソース配列のメモリ管理のメカニズムを無効にする
        if(src.FreeMode()) src.FreeMode(false);
        //--- ソース配列を削除しない
        //--- 結果:
        //--- 受け取り側の配列の削除後、ソース配列での不正なポインタでの要素アドレス指定が可能
        break;
    case 2:
        //--- ソース配列のメモリ管理のメカニズムを無効にする
        src.FreeMode(false);
        //--- 受け取り側の配列のメモリ管理のメカニズムを無効にする
        array.FreeMode(false);
        //--- 結果:
        //--- プログラム終了後、「メモリリーク」が発生する
        break;
    }
 }
else
 {
  //--- ソース配列のメモリ管理のメカニズムを無効にする
  if(src.FreeMode()) src.FreeMode(false);
  //--- ソース配列を削除する
  delete src;
  //--- 結果
  //--- 受け取り側の配列要素のアドレス指定は正しい
  //--- 受け取り側の配列の削除はその要素の削除につながる
 }
 

例:

//--- CArrayObj::AddArray(const CArrayObj*) の例
#include <Arrays\ArrayObj.mqh>
//---
void OnStart()
 {
  CArrayObj *array=new CArrayObj;
  //---
  if(array==NULL)
    {
    printf("Object create error");
    return;
    }
  //--- ソース配列を作成する
  CArrayObj *src=new CArrayObj;
  if(src==NULL)
    {
    printf("Object create error");
    delete array;
    return;
    }
  //--- メモリ管理フラグをリセットする
  src.FreeMode(false);
  //--- ソース配列に書き込む
  //--- . にて。.
  //--- 別の配列を追加する
  if(!array.AddArray(src))
    {
    printf("Array addition error");
    delete src;
    delete array;
    return;
    }
  //--- 追加元の空配列を削除する
  delete src;
  //--- 配列を使用する
  //--- . にて。.
  //--- 配列を削除する
  delete array;
 }