Ошибки, баги, вопросы - страница 3095

 

Есть скрипт

class X {};

void fTest(X &Obj) {return;}

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

Вопрос: если GetPointer(obj) передается ок, то почему &obj не проходит?

Это для чего-то нужно?

 

Хочу уточнить, на всякий случай. Предположим, есть такой код:

ClassX *x=new ClassX;

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

delete x;

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

ClassY *y=new ClassY;

Print(x==y);            // может ли быть true?
Возможно ли в принципе, что x будет равен y?
 
mktr8591 #:

Хочу уточнить, на всякий случай. Предположим, есть такой код:

Возможно ли в принципе, что x будет равен y?

Теоретически - да. Раньше распринтовка указателя показывала счетчик (можно было видеть количество всех объектов). Сейчас - рандом.

 
fxsaber #:

Теоретически - да. Раньше распринтовка указателя показывала счетчик (можно было видеть количество всех объектов). Сейчас - рандом.

Возможно, но для рандома что-то мальнькие значения - у меня обычно семизначные цифры.
 
mktr8591 # :

Есть скрипт

Вопрос: если GetPointer (obj) передается ок, то почему &obj не проходит?

Это для чего-то нужно?

Здесь нет необходимости в GetPointer ().

   fTest(obj);                       //ОК

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

Здесь нет необходимости в GetPointer ().

Согласен. Просто интересно, почему такая разница в поведении.
 
mktr8591 #:

Хочу уточнить, на всякий случай. Предположим, есть такой код:

Возможно ли в принципе, что x будет равен y?

Нет, невозможно

 
mktr8591 #:

Хочу уточнить, на всякий случай. Предположим, есть такой код:

Возможно ли в принципе, что x будет равен y?


Рекомендую не использовать авторазыменование указателя  в ссылку и делать это явно, как показано в коде ниже (выделено красным):

class A
  {
  };

void func(A &)
  {
  }

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

   func(*pa);
  }
 
Ilyas # :


Рекомендую не использовать авторазыменование указателя  в ссылку и делать это явно, как показано в коде ниже (выделено красным):

Что изменилось? Разве не то же самое в конце концов?
 

Нет вопроса к ошибке, но она почему-то задвоенная.

class X {};

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

void OnStart()
  {
   X obj;
   fTest(GetPointer(obj));                      //'GetPointer' - parameter passed as reference, variable expected - ДВАЖДЫ!
  }
Причина обращения: