unique_ptr にconst修飾子がついているケースがChromiumでも散見される。
constがつくとどういう挙動になるのかを確認する。
constは変数前につけることでその変数の値を不変にする修飾子。
例えばconst int val = 0
と変数val
を宣言すると違う値を再代入することはできない。
val = 1
とかいたらコンパイルエラーになる。
constはポインタにつけると挙動がややこしくなる。
ポインタ変数は、指すアドレスそのものを変更できるかと、指す先の値を変更できるかの2タイプ存在する。
それはconstをつける位置によって変わる。
ではstd::unique_ptrとconstの関係を見る。
まず先頭にconstをつけてみる。
生ポインタにおけるint* const ptr2
と同じ挙動をした。
ではconst int*
にあたる書き方はどうすればいいかというと以下。
格納する値をconstにすればよい。
生ポインタと同様に、どちらも不変にすることもできる。
const auto みたいに書けば良かった…
関数にconst参照渡しをする場合、その関数内で引数の値を書き換えられないことを期待している。
std::unique_ptrの先頭にconstをつけても格納されている値は書き換えられてしまうので要注意。
値を取り出してconst参照で渡すのが一番よさそう?