When the c++ compiler generates very similar assembler code for a reference and pointer, why is using references preferred (and considered safer) compared to pointers?
Well the answer you point out answer that. From the "safer" point of view I think that basically it is hard to write code like :
int* i;
// ...
cout << *i << endl; // segfault
As a reference is always initialized, and
MyObject* po = new MyObject(foo);
// ...
delete po;
// ...
po->doSomething(); // segfault
But as said in the question you mention, that's not only because they are safer that references are used ...
my2c