スコープを抜けたら自動でdelete
unique_ptrは便利
リソースを自動で解放 デリータも設定できる
リソースハンドルがポインタでなくてもよいのでは?
GTUのメモリバッファのハンドルとかソケットとかコモンオブジェクトとか
ハンドルをリリースしないといけないが、単に置き換えただけではコンパイルできない。
デリータの中でpointer型を指定
intとnullptrの比較が出来ずエラーに。。
でもどうしようもない…
しょうがないのでユニークポインタを使うのをあきらめて自分で型を書く。
めんどう。
- 例外安全性
- ムーブ
- リソース漏れ
ハンドルごとに毎回書かないといけないのか…
任意の型のリソースハンドルに
- スコープを抜けたら自動で指定したデリータを実行してくれて
- ムーブできて
unique_resource
- 次期標準ライブラリに備えたやつ
- いつつかえるようになるの? N4189にサンプル実装あるからコピペすればつかえる
- N4189のunique_resourceは、C++14コンパイラで使えたりする
まとめ
- unique_ptrはデリータをカスタマイズできるが、ポインタ型のハンドルしかもてない
- unique_resourceが非ポインタ型ハンドルの自動リソース管理のために提案されている
- N4189からコピペしたら使える
effective modern C++ Item37
リファレンスコードを積極的にGitHubにあげてて、規格書もTexで書かれていたりする
デリータとしてラムダを渡すだけで良い。
C++14だと生のポインタを使う必要がなくって、newもdeleteも必要なくなってきている。