Recursos compartidos
Algunos objetos, como Gdk::Pixbuf y Pango::Font, se obtienen de un almacén compartido. Por lo tanto, no puede instanciar sus propias instancias. Estas clases típicamente heredan de Glib::Object. En lugar de requerirle referenciar y desreferenciar estos objetos, gtkmm usa el puntero inteligente Glib::RefPtr<>. Cairomm tiene su propio puntero inteligente, Cairo::RefPtr<>.
Objetos tales como Gdk::Pixbuf sólo pueden instanciarse con una función create(). Por ejemplo,
Glib::RefPtr<Gdk::Pixbuf> pixbuf = Gdk::Pixbuf::create_from_file(filename);
No hay manera de obtener un Gdk::Pixbuf simple. En este ejemplo, pixbuf es un puntero inteligente, por lo que puede hacer esto, de manera muy similar a un puntero normal:
int width = 0; if(pixbuf) { width = pixbuf->get_width(); }
Cuando pixbuf salga del alcance, un unref() sucederá en segundo plano y ya no necesitará preocuparse más de él. No hay new, por lo que no hay delete.
Si copia un RefPtr, por ejemplo
Glib::RefPtr<Gdk::Pixbuf> pixbuf2 = pixbuf;
Consulte el apéndice para obtener información detallada acerca de «RefPtr».
Si quiere aprender más acerca de punteros inteligentes, puede echarle un vistazo a estos libros:
- Bjarne Stroustrup, «The C++ Programming Language»: sección 14.4.2
- Nicolai M. Josuttis, «The C++ Standard Library» - sección 4.2