Ressources partagées
Certains objets, tels que les Gdk::Pixmap et Pango::Font, s'obtiennent à partir d'un stockage partagé. Ainsi, vous ne pouvez pas créer vos propres exemplaires de ces classes. Elles héritent généralement de Glib::Object. Plutôt que vous demander de référencer et déréférencer ces objets, gtkmm utilise le « pointeur intelligent » RefPtr<>.
Les objets du type Gdk::Bitmap ne peuvent être instanciés qu'avec la fonction create(). Par exemple,
Glib::RefPtr<Gdk::Bitmap> bitmap = Gdk::Bitmap::create(window, data, width, height);
Il n'y a pas de moyen d'obtenir un objet Gdk::Bitmap vide. Dans l'exemple, bitmap est un pointeur intelligent, vous pouvez donc faire ceci, tout comme avec un pointeur normal :
if(bitmap) { int depth = bitmap->get_depth(). }
Quand le bitmap est hors de portée, une fonction unref() se produit en arrière-plan et vous n'avez pas besoin de vous en soucier plus longtemps. Il n'y a pas d'opérateur new, il n'est donc pas nécessaire d'appeler delete.
Si vous copiez un RefPtr, par exemple
Glib::RefPtr<Gdk::Bitmap> bitmap2 = bitmap.
Consultez cette annexe pour une information détaillée concernant les RefPtr.
Si vous voulez en savoir plus à propos des pointeurs intelligents, vous pouvez consulter les ouvrages suivants :
- Bjarne Stroustrup, « The C++ Programming Language » - chapitre 14.4.2
- Nicolai M. Josuttis, « The C++ Standard Library » - chapitre 4.2