
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
Il puntatore può anche essere passato per non riferimento - senza &.
Se i distruttori vengono chiamati in questo modo, il puntatore creato sullo stack viene cambiato e, di conseguenza, si ottengono perdite di memoria quando lo stack viene "srotolato". Naturalmente, non è bene farlo, ma se uno vuole...
il comportamento dei puntatori alle classi in MQL non è prevedibile, uno degli amministratori una volta ha scritto che tutte le classi sono create nella memoria globale (allocazione di memoria), tu scrivi che i puntatori alle classi nello scope locale sono creati nello stack (imho, dovrebbe essere così!)
Anche se potrei confondere qualcosa, forse controllerò - in teoria non è difficile da controllare, è sufficiente registrare Print() nel distruttore della classe di test, i distruttori devono essere chiamati automaticamente quando si lascia l'ambito locale...
Sì, possono. Solo se si passa un puntatore senza &, viene creato un nuovo puntatore sullo stack a cui viene assegnato il valore passato. E se allarghiamo la memoria con questo puntatore in una funzione, è il puntatore creato sullo stack che cambia, quindi abbiamo una perdita di memoria quando srotoliamo lo stack. Certo, non è bene farlo, ma se uno vuole...
Non ci saranno perdite. Perché nessuno alloca nulla a questo puntatore nella funzione.
il comportamento dei puntatori alle classi in MQL non è prevedibile, uno degli amministratori una volta ha scritto che tutte le classi sono create nella memoria globale (allocazione di memoria), tu scrivi che i puntatori alle classi nello scope locale sono creati nello stack (imho, dovrebbe essere così!)
Anche se potrei essere confuso da qualcosa, forse lo controllerò - in teoria non è difficile da controllare, devi solo registrare Print() nel distruttore della classe di test, i distruttori devono essere chiamati automaticamente quando si lascia l'ambito locale...
Se la memoria viene allocata dinamicamente (new), viene allocata nell'heap e se si crea un oggetto sullo stack (CObj obj;), anche la memoria viene allocata sullo stack.
Non ci saranno perdite. Perché nessuno alloca nulla a questo puntatore nella funzione.
Questa è una classica perdita. Al puntatore creato sullo stack e inizializzato al momento della creazione con il valore passato nella funzione è stato assegnato un nuovo valore ed è diventato il puntatore a un nuovo oggetto. Dopo di che, il puntatore è stato ucciso in modo sicuro quando lo stack viene dispiegato. Che è esattamente quello che avevamo bisogno di provare. Questo è esattamente dove dovrebbe essere:
Se la memoria viene allocata dinamicamente (new), viene allocata nell'heap, e se si crea un oggetto sullo stack (CObj obj;), anche la memoria gli viene allocata sullo stack.
In mql non esiste una cosa del genere - (CObj obj;).
Una classica perdita. Un puntatore creato sullo stack e inizializzato alla creazione con il valore passato nella funzione veniva assegnato un nuovo valore e diventava un puntatore a un nuovo oggetto. Dopo di che, il puntatore è stato ucciso in modo sicuro quando lo stack è stato dispiegato. Che è esattamente quello che avevamo bisogno di provare. Questo è esattamente dove dovrebbe essere:
Non confondere il dono di Dio con un uovo. Una ragione in più per scrivere codice idiota per dimostrare un'affermazione errata...
Nessuna cosa del genere in mql - (CObj obj;)
Una classica perdita. Un puntatore creato sullo stack e inizializzato alla creazione con il valore passato nella funzione veniva assegnato un nuovo valore e diventava un puntatore a un nuovo oggetto. Dopo di che, il puntatore è stato ucciso in modo sicuro quando lo stack è stato dispiegato. Che è esattamente quello che avevamo bisogno di provare. Questo è esattamente dove dovrebbe essere:
Perché si dovrebbe intenzionalmente riassegnare un puntatore passato a una funzione? Naturalmente, ci sarà una perdita. Ma questo non è un "classico leak", ma un classico errore di lavorare con un puntatore a un oggetto.
Non dovete creare un nuovo oggetto qui, ma gestire l'oggetto esterno il cui puntatore è stato passato nella funzione.
Dai, lo uso sempre.
Dove e come?