Κοινόχρηστοι πόροι
Κάποια αντικείμενα, όπως Gdk::Pixbufs και Pango::Fonts, παίρνονται από μια κοινόχρηστη μνήμη. Συνεπώς δεν μπορείτε να δημιουργήσετε τα δικά σας στιγμιότυπα. Αυτές οι κλάσεις τυπικά κληρονομούν από την Glib::Object. Αντί να σας ζητιέται να αναφέρετε και να αποαναφέρετε αυτά τα αντικείμενα, η gtkmm χρησιμοποιεί τον έξυπνο δείκτη Glib::RefPtr<>. Το Cairomm έχει τον δικό του έξυπνο δείκτη, Cairo::RefPtr<>.
Objects such as Gdk::Pixbuf can only be instantiated with a create() function. For instance,
Glib::RefPtr<Gdk::Pixbuf> 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:
int width = 0; if(pixbuf) { width = pixbuf->get_width(); }
Όταν η pixbuf βγαίνει εκτός εμβέλειας μιας unref() θα συμβεί στο παρασκήνιο και δεν χρειάζεται να ανησυχείτε για αυτό πια. Δεν υπάρχει κανένα new, έτσι δεν υπάρχει κανένα delete.
If you copy a RefPtr, for instance
Glib::RefPtr<Gdk::Pixbuf> pixbuf2 = pixbuf;
Δείτε το παράρτημα για λεπτομερείς πληροφορίες σχετικά με την RefPtr.
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