Errori, bug, domande - pagina 1785
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
So a cosa serve il distruttore. Non mi è chiaro perché la parola virtuale debba essere scritta prima della sua definizione.
Ne ho bisogno per la compatibilità del codice con C++, perché i distruttori sono diversi lì
So a cosa serve il distruttore. Non capisco perché dobbiamo aggiungere la parola virtuale prima della sua definizione.
Funzioni virtuali e distruttore >>>.
La regola di base: se avete almeno una funzione virtuale nella vostra classe, anche il distruttore dovrebbe essere virtuale. Ricordate che il distruttore non è virtuale di default, quindi dovreste dichiararlo esplicitamente. Se non lo fate, siete quasi certi di avere perdite di memoria nel vostro programma. Anche in questo caso non ci vuole molta intelligenza per capire il perché. Vediamo alcuni esempi.
Capito, grazie. Fate spesso il porting su MQL5? - È per questo che gli esempi sono così specifici?
Funzioni virtuali e distruttore >>>.
{
A * pA = new B;
delete pA;
return EXIT_SUCCESS;
}
Questa volta l'oggetto viene costruito come dovrebbe essere, ma quando viene distrutto, si verifica una perdita di memoria, perché il distruttore della classe derivata non viene chiamato.
La ragione è che la cancellazione viene eseguita attraverso un puntatore a una classe base e il compilatore usa il binding anticipato per chiamare il distruttore. Il distruttore della classe base non può chiamare il distruttore della classe derivata perché non ne sa nulla. Come risultato, parte della memoria allocata per la classe derivata è irrimediabilmente persa.Per evitare questo, il distruttore nella classe base deve essere dichiarato come virtuale.
Non capisco architettonicamente perché, rendendo virtuale il distruttore di base, appaiono informazioni sul distruttore derivato.
Ora capisco che quando la base è virtuale, allora definendo un distruttore derivato facciamo una sostituzione del distruttore derivato invece del distruttore della base. Ma allora il distruttore di base non dovrebbe essere chiamato in questo esempio.
Ovviamente, non capisco come funziona. Non ho mai avuto problemi con le funzioni virtuali in MQL5. Mi piace molto l'OOP grazie a loro. Pensavo di aver capito tutto. Ora ho un dilemma completo. Per favore, me lo spieghi nei suoi termini.
Ritrarre poco. Specifico solo a prima vista. Alcuni "esperti" hanno scritto qui che TUTTO più di 3 classi di derivati è dannoso. Spesso ho solo 3-4 classi base da inizializzare correttamente e solo allora iniziano i veri derivati
Ma allora il distruttore di base non dovrebbe essere chiamato in questo esempio.
Viene chiamato dal distruttore derivato implicitamente. Questo è in realtà ciò che lo rende diverso dalle semplici funzioni virtuali.
Errore di SymbolInfoTick() che restituisce dati irrilevanti - tick overshoot. Build 1525 x64. Test da indicatore, non testato su Expert Advisor:
Reale, Apertura, Access Server V. Tristezza! Prestate attenzione al problema, per favore. E anche al problema nella domanda#1598238 (a partire da pagina 10, post del2017.01.26 09:43).
Cari sviluppatori, sistemiamo i tic! Codice fornito, eccolo - il problema, non c'è bisogno di cercare nulla, basta reagire e risolverlo!