void hoge(const Type& o) ;
だったら引数にNULLを設定した場合、コンパイル時にエラーが分かるから。

ついでに
void hoge(const Type* o) ;
だと常にNULLチェックが必要、そうしないと実行時にどんなエラーが起こるやら。

ちなみにNULLがありえる場合は後者を使う。

ちなみに、ここでいうNULLとは
Type* p = NULL; hoge(p);
のことではなく
hoge(NULL);
のことですぅ。念のため補足