Glib::RefPtrはスマートポインタです。正確に言うならば参照カウンタ型のスマートポインタです。おそらくstd::auto_ptrについてはよく知っていることでしょう。それもスマートポインタのひとつですが、Glib::RefPtrはよりシンプルで、より使いやすいものです。私たちは未来のバージョンのC++標準ライブラリには参照カウンタ型の共有スマートポインタが入るだろうと考えています。おそらく未来のバージョンgtkmmではそちらを使うようになるでしょう。
スマートポインタは通常のポインタとほとんど同じようにふるまいます。いくつか例を挙げます。
RefPtrは通常のポインタと同様にコピーすることができます。しかし後者と違って、こちらはそれが指すインスタンスを破棄してしまうかどうか気にする必要がありません。
Glib::RefPtr<Gdk::Bitmap> refBitmap = Gdk::Bitmap::create(window, data, width, height); Glib::RefPtr<Gdk::Bitmap> refBitmap2 = refBitmap;
もちろんこれはRefPtrを通常のコンテナ、std::vectorやstd::listなどに入れることができるということを意味しています。
std::list< Glib::RefPtr<Gdk::Pixmap> > listPixmaps; Glib::RefPtr<Gdk::Pixmap> refPixmap = Gdk::Pixmap::create(window, width, height, depth); listPixmaps.push_back(refPixmap);