unique_ptr::reset
には、2番目の引数として受け取るコンストラクタと一致するように、const deleter&
とdeleter&&
をとるオーバーロードはありませんか?unique_ptr :: resetにdeleterをとるオーバーロードがないのはなぜですか?
unique_ptr
に格納されているデリータは、コピー割り当てまたは引数付きの移動割り当てreset
になります。デリーターがコピー不可または移動不可の場合、reset
の対応するオーバーロードの呼び出しはコンパイルされません。これは、コンストラクタとの一貫した動作であるようです。
'なぜ'の質問に対して唯一の_authoritative_答えがあるため+1。 – ildjarn
リセット機能があった場合、shared_ptrの方がよりクリーンで一貫性がありますか?私にとっては、カスタム・デリター機能を持っているときには、特にきれいに感じます。たとえば、次のようにします。 'ptr = unique_ptr(new_raw_ptr、deleter_function);' vs 'ptr.reset(new_raw_ptr、deleter_function);'あるいは、同じdeleter_functionを保持できればさらに良いでしょう。したがって、 'ptr.reset(new_raw_ptr);'のようになります。 –
felipou
@felipou:後者の作品。前者については、あなたがどうやってそれを実現できるかを以下に示します:http://cplusplus.github.io/LWG/lwg-active.html#submit_issue –