//+------------------------------------------------------------------+ //| MacroExample | //| Copyright 2014, MetaQuotes Software Corp. | //| https://www.metaquotes.net | //+------------------------------------------------------------------+ #property script_show_inputs input bool InpSecond=true; #define DEFCLASS(class_name) class class_name:public CBase{public:class_name(string name):CBase(name){}}; #define TOSTR(x) #x #define AUTODEL(obj) CAutoDelete auto_##obj(obj) #define NEWOBJ(type,ptr) do { ptr=new type(TOSTR(ptr)); \ Print("Create object '",TOSTR(type)," ",TOSTR(ptr),"' by macro NEWOBJ"); } \ while(0) //+------------------------------------------------------------------+ //| Basisklasse, die für das automatische Löschen von Objekten benötigt wird | //+------------------------------------------------------------------+ class CBase { protected: string m_name; public: CBase(string name):m_name(name) { } string Name(void) const{ return(m_name); } }; //+------------------------------------------------------------------+ //| Die Klasse für das automatische Löschen von Objekten erlaubt es, die erstellten Objekte nicht zu | //| überwachen. Sie löscht diese in ihrem Destruktor | //+------------------------------------------------------------------+ class CAutoDelete { CBase *m_obj; public: CAutoDelete(CBase *obj):m_obj(obj) { } ~CAutoDelete() { if(CheckPointer(m_obj)==POINTER_DYNAMIC) { Print("Delete object '",m_obj.Name(),"' by CAutoDelete class"); delete m_obj; } } }; //+------------------------------------------------------------------+ //| Deklariere zwei neue Klassen - CFoo und CBar | //+------------------------------------------------------------------+ DEFCLASS(CFoo); DEFCLASS(CBar); //+------------------------------------------------------------------+ //| Hauptfunktion des Skriptes | //+------------------------------------------------------------------+ void OnStart() { CFoo *foo; //--- erstelle ein Objekt der Klasse CFoo NEWOBJ(CFoo,foo); //--- erstelle eine Instanz der Klasse für das automatische Löschen des Objektes CFoo foo AUTODEL(foo); //--- if(InpSecond) { CBar *bar; //--- NEWOBJ(CBar,bar); AUTODEL(bar); } //--- foo muss man nicht löschen, es wird automatisch gelöscht } //+------------------------------------------------------------------+
Verbesserungen anhand Crash-Logs.
Die Dokumentation wurde aktualisiert.
Die Aktualisierung wird über LiveUpdate verfügbar sein.
Verbesserungen anhand Crash-Logs.
Die Dokumentation wurde aktualisiert.
Die Aktualisierung wird über LiveUpdate verfügbar sein.