]>
git.saurik.com Git - wxWidgets.git/blob - include/wx/checkeddelete.h
1 ///////////////////////////////////////////////////////////////////////////////
2 // Name: wx/checkeddelete.h
3 // Purpose: wxCHECKED_DELETE() macro
4 // Author: Vadim Zeitlin
7 // Copyright: (c) 2002-2009 wxWidgets dev team
8 // Licence: wxWindows licence
9 ///////////////////////////////////////////////////////////////////////////////
11 #ifndef _WX_CHECKEDDELETE_H_
12 #define _WX_CHECKEDDELETE_H_
14 // TODO: provide wxCheckedDelete[Array]() template functions too
16 // ----------------------------------------------------------------------------
17 // wxCHECKED_DELETE and wxCHECKED_DELETE_ARRAY macros
18 // ----------------------------------------------------------------------------
21 checked deleters are used to make sure that the type being deleted is really
22 a complete type.: otherwise sizeof() would result in a compile-time error
24 do { ... } while ( 0 ) construct is used to have an anonymous scope
25 (otherwise we could have name clashes between different "complete"s) but
26 still force a semicolon after the macro
30 #define wxFOR_ONCE(name) for(int name=0; name<1; name++)
31 #define wxPRE_NO_WARNING_SCOPE(name) wxFOR_ONCE(wxMAKE_UNIQUE_NAME(name))
32 #define wxPOST_NO_WARNING_SCOPE(name)
34 #define wxPRE_NO_WARNING_SCOPE(name) do
35 #define wxPOST_NO_WARNING_SCOPE(name) while ( wxFalse )
38 #define wxCHECKED_DELETE(ptr) \
39 wxPRE_NO_WARNING_SCOPE(scope_var1) \
41 typedef char complete[sizeof(*ptr)]; \
43 } wxPOST_NO_WARNING_SCOPE(scope_var1)
45 #define wxCHECKED_DELETE_ARRAY(ptr) \
46 wxPRE_NO_WARNING_SCOPE(scope_var2) \
48 typedef char complete[sizeof(*ptr)]; \
50 } wxPOST_NO_WARNING_SCOPE(scope_var2)
53 #endif // _WX_CHECKEDDELETE_H_