MQLArticles/Utils/FA/AutoDelete.mqh

141 行
9.8 KiB
MQL5

2026-01-31 19:44:40 -05:00
<EFBFBD><EFBFBD>//+------------------------------------------------------------------+
//| AutoDelete.mqh |
//| Copyright 2025, Niquel Mendoza. |
//| https://www.mql5.com/es/users/nique_372 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, Niquel Mendoza."
2026-02-01 16:17:01 -05:00
#property link "https://www.mql5.com/es/users/nique_372"
#property strict
2026-01-31 19:44:40 -05:00
2026-02-14 17:00:45 -05:00
#ifndef MQLARTICLES_UTILS_FA_AUTODELETE_MQH
2026-01-31 19:44:40 -05:00
#define MQLARTICLES_UTILS_FA_AUTODELETE_MQH
//+------------------------------------------------------------------+
2026-02-01 16:17:01 -05:00
//| |
2026-01-31 19:44:40 -05:00
//+------------------------------------------------------------------+
#include "SimpleLogger.mqh"
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
2026-02-01 16:17:01 -05:00
typedef void(*FinalCleanFunction)(const int reason);
#define MQLARTICLES_AUTOCLEANER_FLAG_PTR (1)
2026-01-31 19:44:40 -05:00
#define MQLARTICLES_AUTOCLEANER_FLAG_FUNCTION (2)
#define MQLARTICLES_AUTOCLEANER_ALL (MQLARTICLES_AUTOCLEANER_FLAG_PTR|MQLARTICLES_AUTOCLEANER_FLAG_FUNCTION)
//---
//#define MQLARTICLES_AUTOCLENER_DEBUG
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
class CAutoCleaner
{
private:
static void* s_ptrs[];
static int s_ptrs_size;
static FinalCleanFunction s_c_functions[];
static int s_c_functions_size;
public:
CAutoCleaner() {}
~CAutoCleaner() {}
2026-02-14 17:00:45 -05:00
2026-01-31 19:44:40 -05:00
//--- Inicializar
2026-02-01 16:17:01 -05:00
2026-01-31 19:44:40 -05:00
static void Init()
{
2026-02-01 16:17:01 -05:00
s_ptrs_size = ArrayResize(s_ptrs, 0);
s_c_functions_size = ArrayResize(s_c_functions, 0);
2026-01-31 19:44:40 -05:00
}
2026-02-01 16:17:01 -05:00
//--- Punteros
2026-01-31 19:44:40 -05:00
// A<EFBFBD>adir
static void AddPtr(void* ptr)
2026-02-01 16:17:01 -05:00
2026-01-31 19:44:40 -05:00
{
if(CheckPointer(ptr) == POINTER_DYNAMIC)
2026-02-01 16:17:01 -05:00
{
s_ptrs[ArrayResize(s_ptrs, ++s_ptrs_size) - 1] = ptr;
2026-01-31 19:44:40 -05:00
2026-02-01 16:17:01 -05:00
}
}
2026-01-31 19:44:40 -05:00
// Remover
2026-02-01 16:17:01 -05:00
static void RemovePtr(void* ptr)
{
2026-01-31 19:44:40 -05:00
for(int i = 0; i < s_ptrs_size; i++)
{
if(s_ptrs[i] == ptr)
{
s_ptrs[i] = s_ptrs[--s_ptrs_size];
ArrayResize(s_ptrs, s_ptrs_size);
break;