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