Sdílené prostředky
Některé objekty, jako jsou Gdk::Pixbuf a Pango::Font, se získávají ze sdíleného úložiště. Proto u nich nemůžete vytvářet své vlastní instance. Tyto třídy bývají typicky zděděné z Glib::Object. Místo aby gtkmm vyžadovalo reference a dereference na takovéto objekty, používá chytré ukazatele Glib::RefPtr<>. Cairomm má svůj vlastní chytrý ukazatel Cairo::RefPtr<>.
Objects such as Gdk::Pixbuf can only be instantiated with a create() function. For instance,
auto pixbuf = Gdk::Pixbuf::create_from_file(filename);
You have no way of getting a bare Gdk::Pixbuf. In the example, pixbuf is a smart pointer, so you can do this, much like a normal pointer:
auto width = 0; if(pixbuf) { width = pixbuf->get_width(); }
Kdy pixbuf přejde mimo rozsah působnosti, provede se na pozadí unref() a dále se o něj již nemusíte starat. Nebylo zde žádné new, tak není ani žádné delete.
If you copy a RefPtr, for instance
auto pixbuf2 = pixbuf;
Podrobné informace o RefPtr viz dodatek.
If you wish to learn more about smartpointers, you might look in these books:
- Bjarne Stroustrup, "The C++ Programming Language" Forth Edition - section 34.3
- Nicolai M. Josuttis, "The C++ Standard Library" - section 4.2