AddArray
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;
}