When should you use reference to pointers like those found in function arguments (class_name * & )?
When you want the callee to change the pointer itself, not the object to which it points. For example, a function that allocates memory and assigns the address of the memory block it allocated to its argument must take a reference to a pointer, or a pointer to pointer:
void allocate( void *& ptr, int size)
ptr = new char[size); // change the value of ptr