I agree with SixDegrees, invalid references could be even more painful to debug, consider this:
Qt Code:
  1. #include <iostream>
  2.  
  3. class Test{
  4. public:
  5. int x;
  6. };
  7.  
  8. int main( int argc, char ** argv ){
  9. Test * test = new Test();
  10. Test& ref = *test;
  11. ref.x = 10;
  12. std::cout << "value is " << ref.x;
  13. delete test;
  14. std::cout << "\nwhat now ? " << ref.x;
  15. // test->x = 0; // this will cause crash on my machine, line above not
  16. return 0;
  17. }
To copy to clipboard, switch view to plain text mode 
on my machine it prints:
value is 10
what now ? 7409624
program runs without complains, while the "pointer" version nicely crashes. This is very simple example, but try to debug such errors with more complicated code. Not very pleasant experience.