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 |