パソコン・メモメモ備忘録

気の向くままパソコン関係等で気になることを書き記す。時々更新!

VC++2005 iterator と ポインタ と &*

VC++2005 になって、前バージョンより、メモリリークとかワイルドポインタに厳しくなっているように思える。特に、XYZ.begin() のポインタを取ろうとして &*XYZ.begin() とかやると、場合によっては例外が飛ぶ。

XYZ が例えば std::vector とした場合、長さが0(空っぽ)の時に、&*XYZ.begin() はワイルドポインタになってしまうから、と勝手に理解しているのだがどうなのだろうか。これを回避するには、空っぽかどうかで処理を分ける必要があって、コードがちょっと長くなるので、なんとなく受け入れがたい。ググっても、スマートな解決方法が見つからない(というか、検索キーワードに &* が指定できない...泣)。

ポインタは自分ではできるだけ使わないようにはしているが、昔書かれたコードに含まれる Win32API などのパラメータでは必須なので、今のところ避けられなかったりする。自動でコンバートするフィルタを書いたら便利かも。

とりあえずスマートな解決方法を知っている方は教えて欲しいです。