Even experienced C++ programmers who have prior experience with C tend to use pointers excessively whereas references may be a better choice. Pointers may result in bugs like the following:
Code:
bool isValid( const Date *pDate);
void f()
{
Date *p = new Date(); //default: current date
//...many lines of code
delete p; //p is now a “dangling pointer”
bool valid = isValid(p); //oops! undefined behavior
p = NULL;
valid = isValid(p) //ops! null pointer dereferencing;
//most likely will lead to a crash
}
The use of references eliminates the notorious bugs related to pointers: null pointer assignment and dangling pointer dereferencing, since a reference is always bound to a valid object:
Code:
bool isValid( const Date& date); //reference version
void f()
{
Date date; //default: current date
//...many lines of code
bool valid = isValid(date); //always safe
date += 100; //add 100 days
valid = isValid(date) //always safe
}