Domande su OOP in MQL5 - pagina 85

 
Non è la prima volta che mi sorprendo a pensare che in MQL è meglio usare OOP solo se assolutamente necessario e solo in una certa parte del codice.
 
Pavel Verveyko:
Non è la prima volta che mi sorprendo a pensare che in MQL è meglio usare OOP solo in caso di necessità urgente e solo in una certa sezione di codice.
Chi mai ti ha dato un'idea così stupida? Se non ti piacciono i gatti allora semplicemente non puoi cucinarli))))
 

Ho letto da qualche parte e un esempio apparso sul forum con una tale costruzione

delete &this;

qualcuno può fare un semplice esempio con questo?

Sono interessato a ciò che questo cancella &questo cancella;

 
Igor Makanu:

Ho letto da qualche parte e un esempio apparso sul forum con una tale costruzione

qualcuno può fare un semplice esempio con questo?

Sono interessato a ciò che questo cancella &questo cancella;

Si cancella da solo)))

 
Vladimir Simakov:

Si rimuove da solo)))

che ha senso

ma ho il sospetto che l'intero punto sia di usarlo con metodi statici

bisogno di testarlo, davvero non so come, ecco perché ho chiesto


UPD: cercato su Google questo argomento ieri, un sacco di menzioni di distruttore privato, anche bisogno di pensare a cosa può fare

 
Igor Makanu:

1) ma sospetto che l'intero punto di "delete &this;" - uso con metodi statici
2) ieri googled questo argomento, molti riferimenti al distruttore privato, anche bisogno di pensare che cosa può fornire

1) Dai metodi statici, l'accesso a questo è vietato.
Dov'è "delete &this;" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Il distruttore privato non permette di creare un oggetto sullo stack, ma un oggetto può ancora essere creato attraverso l'operatore new, questa volta nell'heap:

class A{
   ~A(){printf(__FUNCSIG__);}
public:
    void Delete(){
        delete &this;
    }
};

void OnStart() {
   A* a_ptr = new A();
   a_ptr.Delete();
}

Ecco un altro uso di delete &this.

 
Sergey Dzyublik:

1) Dai metodi statici, l'accesso a questo è vietato.
Dove si fa "delete &this;" - https://stackoverflow.com/questions/447379/what-is-the-use-of-delete-this

2) Un distruttore privato vieta di creare un oggetto sullo stack, ma un oggetto può ancora essere creato attraverso l'operatore new, questa volta nell'heap:

Ecco un altro uso di delete &this.

Si può sempre fare qualcosa con qualcosa. Ma qual è il punto?

Dovresti inventare un nome, dichiararlo come un design pattern... e questo è tutto. È così bello scrivere un mucchio di codice invece di limitarsi a "cancellare qualcosa".

 
Un distruttore privato protegge i tuoi sviluppi dai dilettanti. Dopo tutto, si può usare l'OOP con loro solo in modo maturo - con new e delete. A proposito, hai già pensato a un nome per il "modello"?
 
Dmitry Fedoseev:
Hai davvero un soprannome molto appropriato ))
 
Igor Makanu:

Ho letto da qualche parte e un esempio apparso sul forum con una tale costruzione

qualcuno può fare un semplice esempio con questo?

Sono interessato a ciò che questo cancella &questo cancella;

questo è un puntatore all'oggetto corrente.

Di solito il costrutto delete this viene usato quando un oggetto viene creato da new, ma la responsabilità della cancellazione è sull'oggetto stesso. In questo caso, quando l'oggetto decide che non è più necessario, chiama una funzione di deinizializzazione, in cui si cancella così.

Secondo me, questa è una pratica estremamente pericolosa, accettabile solo nel caso di smartpoint che contano i riferimenti all'oggetto stesso e poi, quando il numero di riferimenti diventa zero, possono cancellarsi. Ma anche in questo caso, mi sembra, c'è spazio per errori di perdita di memoria difficili da trovare.

Secondo me, la responsabilità della cancellazione dovrebbe essere dello stesso oggetto che l'ha creata. Può usare il pattern object factory quando lo crea, ma la cancellazione dovrebbe essere ancora responsabilità dell'oggetto che ha creato il nuovo oggetto.