Libreria di classi generiche - bug, descrizione, domande, caratteristiche d'uso e suggerimenti - pagina 26
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
Si creano copie di oggetti in AddValue tramite new, ma non si rilasciano nel distruttore, si cancella solo la lista dei puntatori.
la guida dice che chiamando un distruttore si chiameranno anche i distruttori delle classi che avete usato
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Non ricordo un caso in cui il terminale non abbia scritto nel log un avvertimento sugli oggetti non distrutti dopo che lo script è stato scaricato - il mio esempio non mostra tale avvertimento
In secondo luogo, avresti dovuto farlo correttamente con il costruttore di copia invece dell'operatore di assegnazione. Ma tutto questo è IMHO)
Ho trovato informazioni da sviluppatori che strutture o classi semplici in MQL sono sempre copiate senza problemi, l'ho controllato diverse volte e sembra essere vero, finché uso le caratteristiche del linguaggio
Questo è ciò che riguarda la discussione - MQL non è C++, ho smesso di cercare analogie tra loro, gli sviluppatori hanno scritto che questo è il modo in cui è implementato - l'ho controllato, funziona - quindi potete usarlo.
Si creano copie di oggetti in AddValue tramite new, ma non si liberano nel distruttore, si cancella solo la lista dei puntatori.
Oh, caro! E come si può cancellare un'istanza di una classe creata tramite new nel distruttore. Prova a farlo. Non funzionerà.
Potete farlo solo nel distruttore di qualche altra classe.
Oh, merda! E come si può cancellare un'istanza di una classe creata tramite new nel distruttore. Si può provare. Non funzionerà.
Potete farlo solo nel distruttore di un'altra classe.
Stavo parlando del distruttore di un'altra classe. Stavo parlando di elementi creati tramite new nel metodoAddValue
dice che quando il distruttore viene chiamato, anche i distruttori delle classi utilizzate saranno chiamati
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Non ricordo un caso in cui il terminale non abbia scritto un avviso di oggetti non distrutti nel log dopo che lo script è stato scaricato - il mio esempio non mostra tale avviso
Ho sentito dire dagli sviluppatori che strutture o classi semplici in MQL sono sempre copiate senza problemi, l'ho controllato diverse volte e sembra essere vero, per ora uso le possibilità del linguaggio
Questo è ciò che riguarda la discussione - MQL non è C++, ho smesso di cercare analogie tra loro, gli sviluppatori hanno scritto che questo è il modo in cui è implementato - l'ho controllato, funziona - quindi puoi usarlo, se la sintassi standard C++ è fondamentale, non dovrei preoccuparmi di mettere tutta la logica in .dll.
Sì, l'ho visto nell'aiuto... Una cosa molto implicita, sembra più una stampella, invece di unique_ptr...
Sì, l'ho visto nell'aiuto... Una cosa molto implicita, più come una stampella invece di unique_ptr...
Ed è così comodo che non posso nemmeno chiamarlo una stampella:
Create un oggetto di qualsiasi classe, mettetelo in una lista di memoria, e non dovrete più preoccuparvi di rimuoverlo - il sottosistema terminale lo pulisce da solo.
Ma si può anche impostare il funzionamento manuale e "eseguire" per tutti gli oggetti appena creati cercando di tracciare quando, dove e per quali scopi è stato creato e se è necessario ora. Se non è necessario, cancellatelo. Ma quando hai fatto un errore, si scopre che era necessario - si blocca quando si accede a un puntatore non valido...
Quindi la stampella è solo "inseguire gli oggetti" cercando la loro inutilità e preoccupandosi delle perdite di memoria se qualche oggetto non è stato raggiunto.
In secondo luogo, la cosa giusta da fare è usare il costruttore di copia invece dell'operatore di assegnazione. Ma questo è tutto IMHO)
Puoi darmi un esempio di come copiarlo correttamente per questo modello?
Ho usato l'aiuto per scrivere il metodo AddValuehttps://www.mql5.com/ru/docs/basis/types/classes
Mi sono scervellato, ma non vedo altra soluzione in MQL che quella che ho scritto nel mio esempio!
Mostrami la tua implementazione della corretta memorizzazione dei dati
Ed è così comodo che non si può nemmeno chiamarlo stampella:
Create qualsiasi oggetto di qualsiasi classe, mettetelo nella lista di memoria e non dovrete più preoccuparvi di rimuoverlo - il sottosistema terminale lo pulisce da solo.
Ma si può anche impostare il funzionamento manuale ed "eseguire" per tutti gli oggetti appena creati cercando di scoprire quando, dove e per quali scopi è stato creato e se è necessario ora. Se non è necessario, cancellatelo. Ma quando hai fatto un errore, si scopre che era necessario - si blocca quando si accede a un puntatore non valido...
Quindi la stampella è solo "inseguire gli oggetti" cercando la loro inutilità e preoccupandosi delle perdite di memoria se qualche oggetto non è stato raggiunto.
Il punto qui è che una volta che aggiungete un puntatore alla collezione, rimane anche con voi. Questo è il primo.
dice che quando il distruttore viene chiamato, anche i distruttori delle classi utilizzate saranno chiamati
https://www.mql5.com/ru/docs/standardlibrary/datastructures/carrayobj#carrayobjfeatures
Non ricordo un caso in cui il terminale non abbia scritto un avviso di oggetti non distrutti nel log dopo che lo script è stato scaricato - il mio esempio non mostra tale avviso
Ho sentito dire dagli sviluppatori che strutture o classi semplici in MQL sono sempre copiate senza problemi, l'ho controllato diverse volte e sembra essere vero, per ora uso le possibilità del linguaggio
Questo è ciò che riguarda la discussione - MQL non è C++, ho rinunciato a cercare analogie tra loro, gli sviluppatori hanno scritto che questo è il modo in cui è implementato - l'ho controllato, funziona - quindi potete usarlo, se la sintassi standard C++ è cruciale, potete facilmente scrivere tutta la logica in .dll
Si può fare un array triangolare con questo?
A causa delle limitazioni della lingua, è improbabile che qualcosa di decente funzioni. Ho questa stampella (un wrapper leggero su un array standard).
Per memorizzare i puntatori, scrivete un wrapper unic_ptr (anche se non potete averne uno completo, ma almeno auto_ptr). A mio parere, anche una tale primitiva è molto più conveniente delle controparti template di std.