下载MetaTrader 5

FreeMode

获取删除列表项时的内存管理标志。

void  FreeMode(
   bool  mode      // 新值
   )

参数

mode

[输入]  新的内存管理标志值。

注释

设置内存管理标志 - 这是使用类 CList 的重点。由于列表元素是动态对象指针, 当您从列表删除时判断做什么就很重要。如果标志已设置, 当您删除一个列表项时, 列表项自动由操作符删除。如果标志未设置, 则假设删除对象的指针在用户程序的某处依然使用, 且程序随后会将其释放。

如果用户重置了内存管理标志, 用户必须了解他们有责任在程序完成前删除列表, 因为不这样做的话, 在创建新的操作符时原有元素所占用的内存不会被释放。当数据量很大时, 它会产生泄露, 最终甚至会破坏您的终端。

如果用户没有重置内存管理标志, 还有另一个 "暗礁"。使用存储在本地变量某处的列表项指针, 当删除列表后将会导致严重错误并令用户程序崩溃。省缺时, 内存管理标志被设置, 即列表类负责释放内存元素。

例如:

//--- 例程 CList::FreeMode(bool)  
#include <Arrays\List.mqh>  
//---  
void OnStart()  
  {  
   CList *list=new CList;  
   //---  
   if(list==NULL)  
     {  
      printf("对象创建错误");  
      return;  
     }  
   //--- 获取释放模式标志  
   list.FreeMode(false);  
   //--- 使用列表  
   //--- . . .  
   //--- 删除列表  
   delete list;  
  }  


更新: 2015.12.03