http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2351.htm#creation
shared_ptr のファクトリ関数の話で, user-end コードから new が追放されるとか,例外安全の話 (ここで書かれているような問題が発生しないよー) が出てくるのは理解できるんだけれど,最初なんで効率の話にまで及ぶのかが理解できなかった.
ぐぁ,今 shared_ptr に aliasing の機能があるという前提があるとして,ファクトリで shared_ptr を生成した場合, shared_ptr に必要な ([強|弱]参照カウンタや deleter 周りの) もろもろのメンバーと,生成させたいオブジェクトを構築できるだけの未初期化領域を持つクラスを作っておいて (ただし automatic storage duration を持つ未初期化領域にオブジェクトを遅延構築するテクニックが必要かな) ,一度だけそのクラスのオブジェクトの allocation を発動した上で,ファクトリから返す shared_ptr は生成させたい型のオブジェクトに aliasing させるという芸当が可能になることに気が付いて,「おー,これはすごいwww」と喜んでいるバカがここに一人.ふつーは allocation が2回要るもんねぇ.
こういう,ある部分 (この例では new と shared_ptr の生成) の結合度を上げることによる最適化を図りながら, user-end に対して結合度が上がっていることの影響がまったく見えず,かつその結合度を上げる機構が primitive な機能 (この例では aliasing) に還元されているって,最適化のあり方としてはかなり理想的なんじゃないですかにゃ?