下载MetaTrader 5

AddArray

在数组末尾添加另一个数组的元素。

bool  AddArray(
   const CArrayObj *  src      // 源 数组指针
   )

参数

src

[输入] 类 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("对象创建错误");
      return;
     }
   //--- 创建源数组
   CArrayObj *src=new CArrayObj;
   if(src==NULL)
     {
      printf("对象创建错误");
      delete array;
      return;
     }
   //--- 重置模式标志
   src.FreeMode(false);
   //--- 填充源数组
   //--- . . .
   //--- 添加另一个数组
   if(!array.AddArray(src))
     {
      printf("数组添加错误");
      delete src;
      delete array;
      return;
     }
   //--- 删除无元素源数组
   delete src;
   //--- 使用数组
   //--- . . .
   //--- 删除数组
   delete array;
  }


更新: 2015.12.03
Add