forked from nique_372/MQLArticles
77 lines
No EOL
2 KiB
MQL5
77 lines
No EOL
2 KiB
MQL5
//+------------------------------------------------------------------+
| |
//| AutoDelete.mqh |
| |
//| Copyright 2025, Niquel Mendoza. |
| |
//| https://www.mql5.com/es/users/nique_372 |
| |
//+------------------------------------------------------------------+
| |
#property copyright "Copyright 2025, Niquel Mendoza."
| |
#property link "https://www.mql5.com/es/users/nique_372"
| |
#property strict
| |
| |
| |
#ifndef MQLARTICLES_UTILS_FA_AUTODELETE_MQH
| |
#define MQLARTICLES_UTILS_FA_AUTODELETE_MQH
| |
| |
//+------------------------------------------------------------------+
| |
//| |
| |
//+------------------------------------------------------------------+
| |
struct CAutoPtrCleaner
| |
{
| |
private:
| |
void* m_ptrs[];
| |
int m_ptrs_size;
| |
| |
public:
| |
CAutoPtrCleaner()
| |
{
| |
m_ptrs_size = ArrayResize(m_ptrs, 0);
| |
}
| |
~CAutoPtrCleaner()
| |
{
| |
Clean(true);
| |
}
| |
| |
| |
//---
| |
void Add(void* ptr)
| |
{
| |
if(CheckPointer(ptr) == POINTER_DYNAMIC)
| |
{
| |
m_ptrs[ArrayResize(m_ptrs, ++m_ptrs_size) - 1] = ptr;
| |
}
| |
}
| |
| |
//---
| |
void Remove(void* ptr)
| |
{
| |
for(int i = 0; i < m_ptrs_size; i++)
| |
{
| |
if(m_ptrs[i] == ptr)
| |
{
| |
m_ptrs[i] = m_ptrs[--m_ptrs_size];
| |
ArrayResize(m_ptrs, m_ptrs_size);
| |
break;
| |
}
| |
}
| |
}
| |
| |
//---
| |
__forceinline int Total() const { return m_ptrs_size; }
| |
| |
//---
| |
void Clean(bool delete_ptr)
| |
{
| |
if(delete_ptr)
| |
{
| |
for(int i = 0; i < m_ptrs_size; i++)
| |
{
| |
if(CheckPointer(m_ptrs[i]) == POINTER_DYNAMIC)
| |
delete m_ptrs[i];
| |
}
| |
}
| |
m_ptrs_size = ArrayResize(m_ptrs, 0);
| |
}
| |
};
| |
//+------------------------------------------------------------------+
| |
CAutoPtrCleaner g_ea_cleaner;
| |
//+------------------------------------------------------------------+
| |
#endif // MQLARTICLES_UTILS_FA_AUTODELETE_MQH |