読者です 読者をやめる 読者になる 読者になる

ゆとりーなの日記

日記的な事を書いて行くと思はれる

const参照返し再考

メンバ変数をconst参照で返してよいかの話です。最近ちょっと話題になっていたので。
const参照でメンバ変数を返すと、誰かさんがconst参照或いはポインタで受けてしまった場合何か得体のしれないものを指してしまう可能性があるので危険な事があります。const参照で受けるなといえばそうなのですが、何があるか分からない世の中ですから少し考えてみましょう。
まぁ何と云うか、標準のコンテナの要素アクセス、operator []やらatやらはconst参照で要素を返してきます。なんだ標準がやってるのかと思うかもしれませんが、コンテナの要素を参照で取ったら、そのコンテナが先に死んだら何かやばそうだと割と直観的に思います。
続いてラッパーとかです。色々便利メソッドでラップしたけどいざという時の為にオリジナルにもアクセスできるようにしとくかとshared_ptrを返すとします。これもラッパーですから、参照で取ったとして先にラッパーが死んだら何か変だぞと割と直観的に思えます。
で、その他。例えばウィンドウの座標構造体とかですかね。EffectiveC++もこんな感じの例だったと思うのですが、この場合座標情報を参照で取ってウィンドウが先に死んだら座標構造体がやばそうだと思えるかどうかです。が、死んだウィンドウの座標情報の参照が不定でも別に自然な感じがしてきました。
となると意外にconst参照で返しても不自然な物はないのですかね。
うーん、const参照で内部データハンドルを返していい場合の基準がよく分からなくなってきました。