Perché dovreste riassegnare intenzionalmente un puntatorepassato 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.
Questo non sono io. È preso dal codice di qualcun altro su questo thread. Viene preso come esempio.
Moderatori, scusate se ripeto la domanda. Voglio davvero avere una risposta.
Se ho capito bene la domanda, dichiariamo la classe come oggetto usando new. Poi usate un punto per chiamare i metodi pubblici della classe attraverso l'oggetto creato. Dopo che tutti i metodi chiamati sono stati eseguiti, svuotiamo la memoria cancellando l'oggetto creato delete.
Se ho capito bene la domanda, dichiariamo la classe come oggetto usando new. Poi chiamiamo i metodi pubblici della classe attraverso l'oggetto creato, usando un punto. Dopo che tutti i metodi chiamati sono stati eseguiti, svuotiamo la memoria cancellando l'oggetto creato delete.
No. All'inizio pensavo fosse un parametro di funzione come questo - oggetto ma non per riferimento, ma c'è un punto e virgola alla fine. Se è una normale creazione di un oggetto alla dichiarazione, allora perché è tra parentesi? Quindi per ora rimane il mistero del secolo.
No. All'inizio pensavo fosse un parametro di funzione come questo - oggetto ma non per riferimento, ma c'è un punto e virgola alla fine. Se è una normale creazione di un oggetto alla dichiarazione, allora perché è tra parentesi? Quindi per ora rimane il mistero del secolo.
E perché avete deliberatamente riassegnato un puntatorepassato a una funzione? Naturalmente, ci sarà una perdita. Ma non è una "perdita classica", ma un classico errore di gestione di un puntatore a un oggetto.
Non è necessario creare un nuovo oggetto qui, ma gestire l'oggetto esterno il cui puntatore è stato passato nella funzione.
Non si tratta del mio esempio, ma dell'implementazione dei puntatori stessi in MQL - se non è necessario dereferenziarli (e il puntatore può essere assegnato a un'istanza dell'oggetto!), se invece di passare un puntatore si può passare un riferimento all'oggettohttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665
qui non abbiamo informazioni dettagliate su dove e quando (CObj& obj) è apparso (& non è un'operazione di dereferenziazione del puntatore, ma l'acquisizione di un puntatore GetPointer() )
Ok, non voglio sprecare informazioni... Mi sono già detto, e lo ripeterò ancora una volta in questo forum - MQL non è C++, è così che è implementato - beh, non ho altre opzioni
Non si tratta del mio esempio, ma dell'implementazione dei puntatori stessi in MQL - se non è necessario dereferenziarli (e il puntatore può essere assegnato a un'istanza dell'oggetto!), se invece di passare un puntatore si può passare un riferimento all'oggetto https://www.mql5.com/ru/forum/1111/page2471#comment_11796665
qui non abbiamo informazioni dettagliate su dove e quando (CObj& obj) è apparso (& non è un'operazione di dereferenziazione del puntatore, ma l'acquisizione di un puntatore GetPointer() )
Ok, non voglio sprecare informazioni... Mi sono già detto, e lo ripeterò ancora una volta in questo forum - MQL non è C++, è così che è implementato - beh, non ho altre opzioni
Sei drammatico, non ci sono complessità e confusioni.
Dai, lo uso sempre.
Dove, in quale luogo e come?
Moderatori, scusate se ripeto la domanda. Voglio davvero avere una risposta.
Perché dovreste riassegnare intenzionalmente 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.
Dove, in quale luogo e come?
Moderatori, scusate se ripeto la domanda. Voglio davvero avere una risposta.
Dove, in quale luogo e come?
Moderatori, scusate se ripeto la domanda. Voglio davvero avere una risposta.
Se ho capito bene la domanda, dichiariamo la classe come oggetto usando new.
Poi usate un punto per chiamare i metodi pubblici della classe attraverso l'oggetto creato.
Dopo che tutti i metodi chiamati sono stati eseguiti, svuotiamo la memoria cancellando l'oggetto creato delete.
Se ho capito bene la domanda, dichiariamo la classe come oggetto usando new.
Poi chiamiamo i metodi pubblici della classe attraverso l'oggetto creato, usando un punto.
Dopo che tutti i metodi chiamati sono stati eseguiti, svuotiamo la memoria cancellando l'oggetto creato delete.
No. All'inizio pensavo fosse un parametro di funzione come questo - oggetto ma non per riferimento, ma c'è un punto e virgola alla fine. Se è una normale creazione di un oggetto alla dichiarazione, allora perché è tra parentesi? Quindi per ora rimane il mistero del secolo.
No. All'inizio pensavo fosse un parametro di funzione come questo - oggetto ma non per riferimento, ma c'è un punto e virgola alla fine. Se è una normale creazione di un oggetto alla dichiarazione, allora perché è tra parentesi? Quindi per ora rimane il mistero del secolo.
E perché avete deliberatamente riassegnato un puntatore passato a una funzione? Naturalmente, ci sarà una perdita. Ma non è una "perdita classica", ma un classico errore di gestione di un puntatore a un oggetto.
Non è necessario creare un nuovo oggetto qui, ma gestire l'oggetto esterno il cui puntatore è stato passato nella funzione.
Non si tratta del mio esempio, ma dell'implementazione dei puntatori stessi in MQL - se non è necessario dereferenziarli (e il puntatore può essere assegnato a un'istanza dell'oggetto!), se invece di passare un puntatore si può passare un riferimento all'oggettohttps://www.mql5.com/ru/forum/1111/page2471#comment_11796665
qui non abbiamo informazioni dettagliate su dove e quando (CObj& obj) è apparso (& non è un'operazione di dereferenziazione del puntatore, ma l'acquisizione di un puntatore GetPointer() )
Ok, non voglio sprecare informazioni... Mi sono già detto, e lo ripeterò ancora una volta in questo forum - MQL non è C++, è così che è implementato - beh, non ho altre opzioni
Non si tratta del mio esempio, ma dell'implementazione dei puntatori stessi in MQL - se non è necessario dereferenziarli (e il puntatore può essere assegnato a un'istanza dell'oggetto!), se invece di passare un puntatore si può passare un riferimento all'oggetto https://www.mql5.com/ru/forum/1111/page2471#comment_11796665
qui non abbiamo informazioni dettagliate su dove e quando (CObj& obj) è apparso (& non è un'operazione di dereferenziazione del puntatore, ma l'acquisizione di un puntatore GetPointer() )
Ok, non voglio sprecare informazioni... Mi sono già detto, e lo ripeterò ancora una volta in questo forum - MQL non è C++, è così che è implementato - beh, non ho altre opzioni
Sei drammatico, non ci sono complessità e confusioni.
Le parentesi sono perché questa è una nota sul testo))))
Quindi ci siamo.
Come questo:
void z(CObj * o){ }Non solo può, ma meglio, perché si può chiamare così:
z(GetPointer(obj));Se passate un puntatore per riferimento, avete bisogno di un'altra variabile per il puntatore.
***
E se un puntatore deve essere passato a una funzione per creare un oggetto nella funzione, ecco come funziona:
Questo è praticamente tutto quello che volevate sapere sull'OOP, ma avevate paura di chiedere)))