Erros, bugs, perguntas - página 3095

 

Há um guião

class X {};

void fTest(X &Obj) {return;}

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

Pergunta: se o GetPointer(obj) for aprovado ok, porque &obj falha?

Será isto necessário para alguma coisa?

 

Quero esclarecer, só por precaução. Suponha que existe um código como este:

ClassX *x=new ClassX;

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

delete x;

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

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
É possível, em princípio, que x seja igual a y?
 
mktr8591 #:

Quero esclarecer, só por precaução. Suponha que existe um tal código:

É possível, em princípio, que x seja igual a y?

Teoricamente, sim. Anteriormente, o despontar do ponteiro mostrava um contador (podia-se ver o número de todos os objectos). Agora é aleatório.

 
fxsaber #:

Teoricamente, sim. Anteriormente, a impressão do ponteiro mostrava um contador (podia-se ver o número de todos os objectos). Agora é aleatório.

Talvez, mas os valores são pequenos para o aleatório - normalmente tenho sete dígitos.
 
mktr8591 # :

Há um guião

Pergunta: se o GetPointer (obj) for aprovado ok, porque é que o &obj falha?

É necessário para alguma coisa?

Não há necessidade de GetPointer () aqui.

   fTest(obj);                       //ОК

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

Não há necessidade de um GetPointer () aqui.

Concordo. Só me pergunto por que razão há tanta diferença de comportamento.
 
mktr8591 #:

Quero esclarecer, só por precaução. Suponha que existe um tal código:

É possível, em princípio, que x seja igual a y?

Não, não é possível.

 
mktr8591 #:

Quero esclarecer, só por precaução. Suponhamos que temos o seguinte código:

Será possível, em princípio, que x seja igual a y?


Recomendo que não utilize um ponteiro autoranging para uma referência e que o faça explicitamente, como se mostra no código abaixo (destacado a vermelho):

class A
  {
  };

void func(A &)
  {
  }

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

   func(* pa);
  }
 
Ilyas # :


Recomendo que não autorize o ponteiro num link e que o faça explicitamente como se mostra no código abaixo (destacado a vermelho):

O que mudou? Afinal não é a mesma coisa?
 

Não há dúvida sobre o erro, mas está retroactivo por alguma razão.

class X {};

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

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