shared_ptr<IFoo> CreateFoo() {
try {
shared_ptr<IFooFactory> factory = GetFooFactory();
return factory.create();
} catch(...) {
return shared_ptr<IFoo>();
}

これはダメな例ね
こういった意味のない処理を関数にするのは良くない習慣だ
自分が少しタイピングを楽したいだけなのに周りにドキュメント読む手間を取らせて迷惑かけないで欲しい