//+——————————————————————+ //| Check_GetPointer.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| https://www.mql5.com | //+——————————————————————+ #propertycopyright“2009, MetaQuotes Software Corp.” #propertylink“https://www.mql5.com” #propertyversion“1.00” //+——————————————————————+ //| Class implementing the list element | //+——————————————————————+ class CItem { int m_id; string m_comment; CItem* m_next; public: CItem() { m_id=0; m_comment=NULL; m_next=NULL; } ~CItem() { Print(“Destructor of “,m_id, (CheckPointer(GetPointer(this))==POINTER_DYNAMIC)? “dynamic”:“non-dynamic”); } void Initialize(int id,string comm) { m_id=id; m_comment=comm; } void PrintMe() { Print(__FUNCTION__,“:”,m_id,m_comment); } int Identifier() { return(m_id); } CItem* Next() {return(m_next); } void Next(CItem *item) { m_next=item; } }; //+——————————————————————+ //| Simplest class of the list | //+——————————————————————+ class CMyList { CItem* m_items; public: CMyList() { m_items=NULL; } ~CMyList() { Destroy(); } bool InsertToBegin(CItem* item); void Destroy(); }; //+——————————————————————+ //| Inserts list element at the beginning | //+——————————————————————+ bool CMyList::InsertToBegin(CItem* item) { if(CheckPointer(item)==POINTER_INVALID) return(false); //— item.Next(m_items); m_items=item; //— return(true); } //+——————————————————————+ //| Deletes the list by deleting elements | //+——————————————————————+ void CMyList::Destroy() { //— service pointer to work in a loop CItem* item; //— go through the loop and try to delete dynamic pointers while(CheckPointer(m_items)!=POINTER_INVALID) { item=m_items; m_items=m_items.Next(); if(CheckPointer(item)==POINTER_DYNAMIC) { Print(“Dynamyc object “,item.Identifier(),” to be deleted”); delete (item); } elsePrint(“Non-dynamic object “,item.Identifier(),” cannot be deleted”); } //— } //+——————————————————————+ //| Script program start function | //+——————————————————————+ voidOnStart() { CMyList list; CItem items[10]; CItem* item; //— create and add into the list a dynamic object pointer item=new CItem; if(item!=NULL) { item.Initialize(100,“dynamic”); item.PrintMe(); list.InsertToBegin(item); } //— add automatic pointers into the list for(int i=0; i<10; i++) { items[i].Initialize(i,“automatic”); items[i].PrintMe(); item=GetPointer(items[i]); if(CheckPointer(item)!=POINTER_INVALID) list.InsertToBegin(item); } //— add one more dynamic object pointer at the list beginning item=new CItem; if(item!=NULL) { item.Initialize(200,“dynamic”); item.PrintMe(); list.InsertToBegin(item); } //— delete all the list elements list.Destroy(); //— all the list elements will be deleted after the script is over //— see the Experts tab in the terminal }