MQLArticles/Utils/FA/AutoDelete.mqh

77 lines
2 KiB
MQL5
Raw Permalink Normal View History

2026-01-29 10:53:16 -05:00
//+------------------------------------------------------------------+
//| 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