Указатель на указатель часто встречается в "старых" интерфейсах С++ и в "просто С", когда надо в  функции выделить память и что-то туда положить. Что-то типа 
int foo(int **bar)
{
	*bar = new int;
	**bar = 123;
	return 0; // код ошибки
}
В современном С++ лучше написать функцию вида 
std::unique_ptr<int> foo();
а возможные ошибки реализовать на исключениях, так и память не утечет, и код ошибки при каждом вызове проверять не надо. Кроме того, возврат автоуказателя не вызовет у "вызывающего" кода вопросов, должен ли он потом освободить память полученную по указателю, или нет.