>>560
例外が問題なく使えるなら投げるのが正解。

事情があって例外を投げることができない場合の最善手は難しいが、
「それとも〜」以下の手法は有効だと思う。
戻り値を std::auto_ptr<Foo> にすると少し嬉しいかも。