Errori, bug, domande - pagina 3095

 

C'è uno script

class X {};

void fTest(X &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //ОК
//fTest(&obj);         //Compile error: '&' - parameter passed as reference, variable expected   
  }

Domanda: se GetPointer(obj) è passato ok, perché &obj fallisce?

È necessario per qualcosa?

 

Voglio chiarire, per sicurezza. Supponiamo che ci sia un codice come questo:

ClassX *x=new ClassX;

//какой-то код

delete x;

//......много кода, прошло много времени

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
È possibile in linea di principio che x sia uguale a y?
 
mktr8591 #:

Voglio chiarire, per sicurezza. Supponiamo che esista un tale codice:

È possibile in linea di principio che x sia uguale a y?

Teoricamente, sì. In precedenza, la disattivazione del puntatore mostrava un contatore (si poteva vedere il numero di tutti gli oggetti). Ora è casuale.

 
fxsaber #:

Teoricamente, sì. In precedenza, la stampa del puntatore mostrava un contatore (si poteva vedere il numero di tutti gli oggetti). Ora è casuale.

Forse, ma è un po' piccolo per essere casuale - di solito ho sette cifre.
 
mktr8591 # :

C'è uno script

Domanda: se GetPointer (obj) è passato ok, perché &obj fallisce?

È necessario per qualcosa?

Non c'è bisogno di GetPointer () qui.

   fTest(obj);                       //ОК

 // Это для чего-то нужно? 
   X *objptr;
   objptr = &obj;  
 
Alain Verleyen #:

Non c'è bisogno di un GetPointer () qui.

D'accordo. Mi chiedo solo perché ci sia una tale differenza di comportamento.
 
mktr8591 #:

Voglio chiarire, per sicurezza. Supponiamo che esista un tale codice:

È possibile in linea di principio che x sia uguale a y?

No, non è possibile.

 
mktr8591 #:

Voglio chiarire, per sicurezza. Supponiamo di avere il seguente codice:

È possibile in linea di principio che x sia uguale a y?


Vi consiglio di non usare un puntatore autoranging a un riferimento e di farlo esplicitamente, come mostrato nel codice qui sotto (evidenziato in rosso):

class A
  {
  };

void func(A &)
  {
  }

void OnStart(void)
  {
   A a;   
   A *pa=&a;

   func(* pa);
  }
 
Ilyas # :


Vi consiglio di non automatizzare il puntatore in un link e di farlo esplicitamente come mostrato nel codice qui sotto (evidenziato in rosso):

Cosa è cambiato? Non è la stessa cosa, dopo tutto?
 

Non c'è dubbio sull'errore, ma è retrodatato per qualche motivo.

class X {};

template <typename T>
void fTest(T &Obj) {return;}

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //'GetPointer' - parameter passed as reference, variable expected - ДВАЖДЫ!
  }