X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/728449503cca147635cb0b33bfcabf5d66268f5c..e18e78a7cc106a75e5228c51edd982436682633d:/docs/doxygen/overviews/refcount.h diff --git a/docs/doxygen/overviews/refcount.h b/docs/doxygen/overviews/refcount.h index 5feb42767e..48a2bf1bb7 100644 --- a/docs/doxygen/overviews/refcount.h +++ b/docs/doxygen/overviews/refcount.h @@ -6,7 +6,7 @@ // Licence: wxWindows license ///////////////////////////////////////////////////////////////////////////// -/*! +/** @page overview_refcount Reference Counting @@ -52,8 +52,8 @@ it's not implemented at all. That's why not all reference counted classes provide comparison operators. Also note that if you only need to do a @c shallow comparison between two -#wxObject derived classes, you should not use the == and != operators but -rather the wxObject::IsSameAs function. +wxObject derived classes, you should not use the == and != operators but +rather the wxObject::IsSameAs() function. @section overview_refcount_destruct Object Destruction @@ -71,38 +71,42 @@ it. The following classes in wxWidgets have efficient (i.e. fast) assignment operators and copy constructors since they are reference-counted: -@li #wxAcceleratorTable -@li #wxAnimation -@li #wxBitmap -@li #wxBrush -@li #wxCursor -@li #wxFont -@li #wxIcon -@li #wxImage -@li #wxMetafile -@li #wxPalette -@li #wxPen -@li #wxRegion -@li #wxString -@li #wxVariant -@li #wxVariantData +@li wxAcceleratorTable +@li wxAnimation +@li wxBitmap +@li wxBrush +@li wxCursor +@li wxFont +@li wxIcon +@li wxImage +@li wxMetafile +@li wxPalette +@li wxPen +@li wxRegion +@li wxString +@li wxVariant +@li wxVariantData Note that the list above reports the objects which are reference counted in all ports of wxWidgets; some ports may use this technique also for other classes. +All the objects implement a function IsOk() to test if they are referencing valid +data; when the objects are in uninitialized state, you can only use the IsOk() getter; +trying to call any other getter, e.g. wxBrush::GetStyle() on the ::wxNullBrush object, +will result in an assert failure in debug builds. + @section overview_refcount_object Making Your Own Reference Counted Class -Reference counting can be implemented easily using #wxObject and -#wxObjectRefData classes. Alternatively, you can also use the -#wxObjectDataPtr template. +Reference counting can be implemented easily using wxObject and wxObjectRefData +classes. Alternatively, you can also use the wxObjectDataPtr template. -First, derive a new class from #wxObjectRefData and put there the +First, derive a new class from wxObjectRefData and put there the memory-consuming data. -Then derive a new class from #wxObject and implement there the public interface +Then derive a new class from wxObject and implement there the public interface which will be seen by the user of your class. You'll probably want to add a -function to your class which does the cast from #wxObjectRefData to your +function to your class which does the cast from wxObjectRefData to your class-specific shared data. For example: @code