Appendix A. RefPtrスマートポインタ

Table of Contents

Glib::RefPtrはスマートポインタです。正確に言うならば参照カウンタ型のスマートポインタです。おそらくstd::auto_ptrについてはよく知っていることでしょう。それもスマートポインタのひとつですが、Glib::RefPtrはよりシンプルで、より使いやすいものです。私たちは未来のバージョンのC++標準ライブラリには参照カウンタ型の共有スマートポインタが入るだろうと考えています。おそらく未来のバージョンgtkmmではそちらを使うようになるでしょう。

Reference

スマートポインタは通常のポインタとほとんど同じようにふるまいます。いくつか例を挙げます。

コピー

RefPtrは通常のポインタと同様にコピーすることができます。しかし後者と違って、こちらはそれが指すインスタンスを破棄してしまうかどうか気にする必要がありません。

Glib::RefPtr<Gdk::Bitmap> refBitmap = Gdk::Bitmap::create(window,
data, width, height);
Glib::RefPtr<Gdk::Bitmap> refBitmap2 = refBitmap;

もちろんこれはRefPtrを通常のコンテナ、std::vectorstd::listなどに入れることができるということを意味しています。

std::list< Glib::RefPtr<Gdk::Pixmap> > listPixmaps;
Glib::RefPtr<Gdk::Pixmap> refPixmap = Gdk::Pixmap::create(window,
width, height, depth);
listPixmaps.push_back(refPixmap);