Errori, bug, domande - pagina 1892

 
fxsaber:
Un'altra domanda.
Le prestazioni del battistrada.
 
Renat Fatkhullin:
Il lavoro di una pedata.
se è uno scherzo, è divertente )) e se non lo è, per favore spiega cos'è un tread nella programmazione
 
Konstantin:
per favore, spiegate cos'è un protettore nella programmazione
la cosa che ha fatto sparire i decompilatori
 
Renat Fatkhullin:

Sì, ecco un esempio che dimostra la tua domanda:

e uscita:

Per prima cosa, controlliamo il cast non risolto dal basso verso l'alto e otteniamo NULL. Questo è corretto.

Poi creiamo un oggetto CLASS2, assegniamo un riferimento ad esso alla sua classe madre (qui è importante capire che dinamicamente l'ambiente sa che il tipo originale dell'oggetto CLASS2 è memorizzato nelle sue meta-informazioni). Poi (solo la tua domanda) fare un cast dinamico (con il giusto controllo di conversione basato sulle metainformazioni dell'oggetto sorgente) dal riferimento CLASS1 a CLASS2.

Controlliamo il risultato del casting e lo scriviamo nella variabile i = 1. Infine emettiamo il valore di i, riferito all'oggetto originariamente creato.

Tutto funziona correttamente e secondo le specifiche (compresa la specifica dynamic_cast in C++ stesso).

Grazie per il chiarimento. La conversione del tipo in MQL è ora abbastanza chiara)) Ma qual è lo scopo di creare dynamic_cast se non possiamo lanciare dal basso verso l'alto in ogni caso e possiamo fare a meno di dynamic_cast dall'alto verso il basso? Forse ci sono delle sottigliezze qui e io non le capisco?
 
Konstantin:
Grazie per il chiarimento, l'ho più o meno capito in MQL per la conversione dei tipi)) Ma non so perché abbiamo bisogno di dynamic_cast se non possiamo comunque lanciare dal basso verso l'alto e possiamo fare a meno di dynamic_cast dall'alto verso il basso? Forse ci sono delle sottigliezze qui e io non le capisco?

Rileggi il codice e la mia spiegazione, per favore.

Dimostra anche come il cast dinamico può aumentare in modo sicuro il cast dal basso verso l'alto in base alle meta-informazioni dell'oggetto originariamente creato. Se un oggetto è stato creato da un discendente, poi convertito in un riferimento alla classe madre, allora in base alle metainformazioni (l'oggetto originale è effettivamente un discendente) si può tranquillamente convertire quel riferimento a un discendente.

Tipicamente usato quando gli oggetti di vari discendenti sono impilati in un array/elenco di riferimenti alla classe padre, e poi recuperati e castati in modo sicuro su uno o l'altro discendente. Se la conversione produce NULL, significa che l'oggetto non è recuperato dal discendente e non dovrebbe essere gestito.

 
Renat Fatkhullin:

Rileggi il codice e la mia spiegazione, per favore.

Dimostra anche come il cast dinamico può aumentare in modo sicuro il cast dal basso verso l'alto in base alle meta-informazioni dell'oggetto originariamente creato. Se un oggetto è stato creato da un discendente, poi convertito in un riferimento alla classe madre, allora in base alle metainformazioni (l'oggetto originale è effettivamente un discendente) si può tranquillamente convertire quel riferimento a un discendente.

Tipicamente usato quando gli oggetti di vari discendenti sono impilati in un array/elenco di riferimenti alla classe padre, e poi recuperati e castati in modo sicuro su uno o l'altro discendente. Se la conversione produce NULL, allora l'oggetto non è recuperato dal discendente e non dovrebbe essere gestito.

Ho letto il codice, ma non è questo:

CLASS2 *my_ptr2=dynamic_cast<CLASS2 *>(my_ptr);

non è analogo a questo:

CLASS2 *my_ptr2=(CLASS2*)my_ptr;

Non riesco ad afferrare la sottigliezza dell'uso di dynamic_cast, tranne il fatto che quando si esegue del codice usando dynamic_cast non si ottiene un errore perché dynamic_cast restituisce NULL in caso di errore

 
Konstantin:

Ho letto il codice, ma non è questo:

non è simile a questo:

Non riesco ad afferrare la sottigliezza dell'uso di dynamic_cast, tranne il fatto che quando si esegue del codice usando dynamic_cast non si ottiene un errore perché dynamic_cast restituisce NULL in caso di errore

Vi consiglio di leggere le specifiche C++ dymanic_cast su google.

È una cosa banale.

 
Quando si danno le risorse del PC in cludes si blocca all'avvio del gioco - il gioco"Call of Duty: BlackOpsIII" si blocca - 1 agente è stato coinvolto. La priorità dell'agente era minima - la memoria consumava 3,5 gigabyte di 16 - in generale non dovrebbero esserci problemi. Con gli agenti non attivi il gioco andava bene. Avete mai testato la compatibilità degli agenti con altri programmi?
 
-Aleks-:
Quando si danno le risorse del PC in cludes si blocca all'avvio del gioco - il gioco"Call of Duty: BlackOpsIII" si blocca - 1 agente è stato coinvolto. La priorità dell'agente era minima - la memoria consumava 3,5 gigabyte di 16 - in generale non dovrebbero esserci problemi. Con gli agenti non attivi il gioco andava bene. Generalmente testato sulla compatibilità degli agenti con altri programmi?

Per qualche ragione ho pensato subito che forse il bug nel gioco e l'ho collegato alle peculiarità del lavoro su macchine a 64 bit quando il programma viene caricato nello spazio di indirizzo > 4 GB
 
Sergey Dzyublik:

Per qualche motivo venne subito l'idea che forse un bug nel gioco e lo collegò alle peculiarità di lavorare su macchine a 64 bit, quando il programma viene caricato nello spazio di indirizzo > 4 GB

Cioè per verificare questa ipotesi ho bisogno di riempire la RAM più di 4 gigabyte ed eseguire il gioco - proverò quando mio figlio ci gioca.