C++ ポインタ ブートキャンプ

Sapporo.cpp & CLR/H 合同勉強会 : ATNDで僕は、「C++ ポインタ ブートキャンプ」というタイトルでセッションを行いました。
30分頂いた時間枠に収めるために、分量的にはポインタの限定的な紹介にとどまりましたが、ポインタの基礎的な部分を、無駄な抽象化をせずに説明するように心がけました。

ポインタの解説に当たって9枚目のポインタの定義「ポインタとは何らかのオブジェクトを指すオブジェクト」は大事だと思っています。よくポインタは変数を指すであるとか、メモリを指すであるとか言われますが、ポインタが指すのはあくまでオブジェクトです。これについては別エントリでまとめます。*1

また、addressof()とindirect()という仮想的な機能を用いた擬似コードによるポインタのセマンティクスの話も大事だと思っています。つまりaddressof()とindirect()という仮想的な機能を想定し、これがあれば変数を使用せずにオブジェクトを操作できること、アドレスの取得と間接参照、そして実際のコードではどのようなコードに置き換わるのか。
これは関数ポインタという特殊なポインタを除いて、すべてのポインタで共通の概念ですので、このセマンティクスを念頭に置いておくとポインタの理解の助けになるのではないかと思います。

理想的には参照とスマートポインタをもう少し細かく解説もしたかったのですが、スライド作成の時間と、発表時間の都合上軽く紹介するだけにとどめました。

というわけで、ポインタについて、自分ならこう捉えるというのをまとめたスライドになりますが、もし間違いがあったら指摘を頂けるとありがたいです。

*1:ちなみに、僕のスライドも当初9枚目10枚目でそのような表現を使ってしまっていました。修正済み