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;

  }