補足:unique_ptrのパフォーマンスについて

unique_ptrを使ったコードと使わないコードのアセンブリgccに吐かせてみると、-O0の場合はunique_ptrを使うコードの方は関数呼び出しが1回余計に挟まることで、クリティカルなオーバヘッドになっている。

一方gccで-O2を指定してアセンブリを吐かせると、unique_ptrを使っても関数呼び出しを省略する最適化が成されるので、殆どオーバヘッドが存在しないとも言える。ちなみにこのときunique_ptr無しの方は更なる最適化をしてしまい、比較できない状態になってしまったことは付記しておく(つまりunique_ptrを使用することにより、別の最適化が効かなくなる可能性はある)

以上が、@fadis_ の調査にぽんこつさんの余計な所見を追加した結論。