Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
I distruttori in MQL5 sono sempre virtuali. Tutto è cancellato correttamente, provate a mettere Print(__FUNCSIG__); nei distruttori.
L'ho fatto in VC++, ma penso che i meccanismi di rilascio della memoria siano gli stessi?
Ma il tuo esempio funzionerà correttamente, perché puoi specificare il distruttore virtuale solo per la classe base.
Cercherò di mettere l'idea in un modo leggermente diverso:
Dato:
Azioni:
P.S.: la figura mostra il modello di memoria )
Dubbi perché il puntatore alla classe numero uno ed effettivamente in memoria la classe numero due. È importante nel caso dei distruttori, quindi mi chiedevo se ci può essere un problema anche qui. Penso che in tale situazione la corretta liberazione della memoria possa avvenire solo se ci sono alcune etichette in memoria (come char con zero-terminatore) o qualcosa del genere, ecco perché ho chiesto dell'allocazione della memoria.
Il tuo dubbio è perché non hai specificato i costruttori (è importante capire cosa succede in questo caso), prova ad eseguire questo esempio e capirai tutto:
HZ la costruzione stessa così come la cancellazione è scaglionata, e tutte queste informazioni sono memorizzate (il puntatore virtuale stesso ricorda che la classe è stata costruita come un composito dalla base e dal discendente), e quando si cancella, i distruttori sono chiamati in ordine inverso, dal successivo al precedente.
Non si tratta di distruttori, ma della classe stessa, e più precisamente di quanti byte occupa. Si scopre che si allocano 200 byte e poi mi si dice di liberare la memoria indicata dal puntatore che rappresenta l'oggetto con la dimensione di 100 byte.
Sì, il pool di memoria sa per quanto tempo un pezzo di memoria sarà liberato da una chiamata di cancellazione.
Dove vengono memorizzate queste informazioni dipende dall'implementazione del pool.
Per esempio, se date un puntatore a un oggetto in C++ che non è allocato tramite new, vedrete come la vostra applicazione andrà in crash.
Non si tratta di distruttori, ma della classe stessa, e più precisamente di quanti byte occupa. Si scopre che si allocano 200 byte e poi mi si dice di liberare la memoria indicata dal puntatore che rappresenta l'oggetto con la dimensione di 100 byte.
Ho capito che la tua domanda ha a che fare con il modo in cui funziona il pool di memoria.
Sì, il pool di memoria sa per quanto tempo un pezzo sarà liberato da una chiamata di cancellazione.
Dove vengono memorizzate queste informazioni dipende dall'implementazione del pool.
Per esempio, se date un puntatore a un oggetto in C++ che non è stato allocato tramite new, vedrete come la vostra applicazione andrà in crash.