Domande su OOP in MQL5 - pagina 6

 
Dmitry Fedoseev:

Quindi ci siamo.

Come questo:

Non solo può, ma meglio, perché si può chiamare così:

Se passate un puntatore per riferimento, avete bisogno di un'altra variabile per il puntatore.

***

E se dovete passare un puntatore a una funzione per creare un oggetto nella funzione, è così che funziona:

Questo è praticamente tutto quello che volevate sapere sull'OOP, ma avevate paura di chiedere)))

Nuh-uh

 
void z(CObj* & o){
   o = new CObj();
}

E pensatela in questo modo, tutto funziona.

Quindi, se avete domande su OOP, sentitevi liberi di))))

 
Si è rivelato un classico dereferenziamento del puntatore nullo.
 
Vladimir Simakov:

Quindi, se avete domande su OOP, sentitevi liberi di))))

Per favore, spiegate il significato della creazione di un oggetto dinamico usando l'operatore new.

Quando un oggetto viene creato automaticamente, un oggetto di classe viene creato nello stack ed è più veloce di un oggetto dinamico in termini ditempo di esecuzione.
Quando un oggetto viene creato dinamicamente, l'oggetto classe viene creato in memoria (nell'heap) e viene attivato il gestore di memoria del sistema operativo, il processo è più lento.

Ecco le domande:
Se la creazione automatica è più veloce, allora perché è meglio usare oggetti dinamici?
Controllare esplicitamente l'allocazione della memoria?
Eliminare un possibile stack overflow?
E non perdere un oggetto inaspettatamente?
Perché se lo stack trabocca, l'oggetto sarà automaticamente cancellato?

 
Roman:


Non sei stanco di stare al passo con l'argomento?

 
Artyom Trishkin:

Non sei stanco di stare al passo con l'argomento?

Adattare le domande per essere il più preciso possibile.
C'è qualcosa di sbagliato in questo? C'è un pulsante di modifica, quindi puoi usarlo per fare un punto.

 
Roman:

Per favore, spiegate il significato della creazione di un oggetto dinamico con il nuovo operatore.

Quando un oggetto viene creato automaticamente, l'oggetto classe viene creato nello stack, che è più veloce di un oggetto dinamico in termini di tempo di esecuzione.
Quando un oggetto viene creato dinamicamente, l'oggetto classe viene creato in memoria (nell'heap) e viene attivato il gestore di memoria del sistema operativo, il processo è più lento.

Ecco le domande:
Se la creazione automatica è più veloce, allora perché è meglio usare oggetti dinamici?
Controllare esplicitamente l'allocazione della memoria?
Eliminare un possibile stack overflow?
E non perdere un oggetto inaspettatamente?
Perché se lo stack trabocca, l'oggetto sarà automaticamente cancellato?

Perché non leggete la memoria statica, lo stack e l'heap?
 
Roman:

Per favore, spiegate il significato della creazione di un oggetto dinamico con il nuovo operatore.

Un chiaro esempio di utilizzo è quando il tipo di oggetto non è noto in anticipo.

Ecco un buon esempio di questo nell'aiuto: https://www.mql5.com/ru/docs/basis/operators/newoperator

Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
Документация по MQL5: Основы языка / Операторы / Оператор создания объекта new
  • www.mql5.com
//| Создание фигуры                                                  |
 
Vladimir Simakov:

Nuh-uh

Sì, solo che tutto si compila e funziona per qualche motivo.

Che razza di miracoli avete lì... nessuno lo sa, ma, a proposito, non è sorprendente dopo gli esempi di codice di ieri presumibilmente presi da qualche altra parte in questo thread ma in realtà mancanti da qualche altra parte.

***

Oh, e nel caso tu non abbia dimenticato di cosa stavamo parlando originariamente - del passaggio di un puntatore a una funzione o a un metodo (e di quello che hai sostenuto che presumibilmente accade qualche perdita di memoria lì), che è esattamente dove & non è necessario.


 
Roman:

Si prega di spiegare lo scopo della creazione di un oggetto dinamico attraverso il nuovo operatore.

Quando un oggetto viene creato automaticamente, l'oggetto classe viene creato nello stack ed è più veloce di un oggetto dinamico in termini di tempo di esecuzione.
Quando si crea un oggetto dinamicamente, un oggetto di classe viene creato in memoria (nell'heap), quindi coinvolgendo il gestore di memoria del sistema operativo, il processo è più lento.

Ecco le domande:
Se la creazione automatica è più veloce, allora perché è meglio usare oggetti dinamici?
Controllare esplicitamente l'allocazione della memoria?
Eliminare un possibile stack overflow?
E non perdere un oggetto inaspettatamente?
Perché se lo stack trabocca, l'oggetto sarà automaticamente cancellato?

Se il numero di oggetti è noto in anticipo ed è costante durante l'esecuzione del programma, allora il nuovo non è necessario. In tutti gli altri casi - nuovo.