Errori, bug, domande - pagina 1816

 
Mist13:

Ho incontrato (secondo me) un comportamento scorretto dei puntatori di oggetti.

Sembra un errore MQL.

Avete l'errore. Come immaginate di assegnare un genitore vuoto a un discendente?

 
fxsaber:

Sembra un errore MQL.

Avete l'errore. Come immaginate di assegnare un genitore vuoto a un discendente?

Esattamente lo stesso di uno non vuoto. Il baseObj1 contiene un puntatore all'oggetto della classe discendente. Se rimuovete delete(obj1), l'assegnazione nell'ultima linea non causa alcun problema - i tipi di puntatore corrispondono. Penso che l'assegnazione debba andare allo stesso modo se l'oggetto a cui il puntatore si riferisce viene cancellato. E certamente non ci dovrebbe essere nessun errore "Invalid pointer access" - non c'è nessun tentativo di accedere ad un oggetto cancellato.
 
Mist13:
Proprio come uno non vuoto. In baseObj1 c'è un puntatore a un oggetto di classe discendente. Se rimuovete delete(obj1), l'assegnazione nell'ultima linea non causa alcun problema - i tipi di puntatore corrispondono. Penso che l'assegnazione debba andare allo stesso modo se l'oggetto a cui il puntatore si riferisce viene cancellato. E non ci deve essere nessun errore "Invalid pointer access" perché non c'è nessun tentativo di accedere a un oggetto cancellato.
Questa parte del tuo codice
obj2 = baseObj1;//Пока не грохнули объект - no problem
come, dal suo punto di vista, può essere implementato architettonicamente?
 
       obj2 = dynamic_cast<B *>( baseObj1 );//нормально
Tale fusione, se possibile, è possibile solo se l'oggetto base esiste.
 
E come faccio a caricare i file sul mercato dopo l'aggiornamento?
 
fxsaber:
Ecco questa parte del tuo codice.
obj2 = baseObj1;//Пока не грохнули объект - no problem
Come, dal suo punto di vista, si può fare dal punto di vista architettonico?

Apparentemente, sta controllando se il tipo di oggetto referenziato da baseObj1 corrisponde al tipo di puntatore obj2. Ci sono due possibilità qui:

1) Il puntatore stesso può essere una struttura complessa che contiene il tipo dell'oggetto

2) Dobbiamo fare riferimento all'oggetto per scoprire il suo tipo.

Questo sembra essere il caso n. 2, e dovremo conviverci. Grazie per le domande di testa)

 

Kaspersky ha urlato al terminale cercando di aggiornare per l'ultima settimana.

 
fxsaber:
Questa parte del tuo codice
obj2 = baseObj1;//Пока не грохнули объект - no problem
come, dal suo punto di vista, può essere fatto architettonicamente?

Come qui.

class A {};
class B : public A {};
class C : public B {};
void OnStart()
{
        B *b = new B;
        delete b;
        B *c = b;
        b = new C;
        A *a = c;
        Print( a, ":", b, ":", c );
}
 
A100:
Proprio come qui.
class A {};
class B : public A {};
void OnStart()
{
        B *b1 = new B;
        A *a = b1;    
        delete b1;
        B *b2 = b1;
        b1 = new B; //уже другой объект
        a = b2;     //
        Print( a, ":", b1, ":", b2 );
}
Dove?
b1 = a;
 
vladavd:

Kaspersky ha urlato al terminale cercando di aggiornare per l'ultima settimana.

non fatevi prendere dal panico).

tutto chiaro, build 1545. anche kaspersky dice tutto chiaro
https://www.virustotal.com/ru/file/2c3bf04666714cfac26e6e1c0fe355c6081554a0c2a15434849b0a5c241c95b0/analysis/1487685060/








Antivirus scan for 2c3bf04666714cfac26e6e1c0fe355c6081554a0c2a15434849b0a5c241c95b0 at 2017-02-21 13:51:00 UTC - VirusTotal
  • www.virustotal.com
Condensed report! The following is a condensed report of the behaviour of the file when executed in a controlled environment. The actions and events described were either performed by the file itself or by any other process launched by the executed file or subjected to code injection by the executed file. Opened files C:\Documents and...