//+------------------------------------------------------------------+ //| 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