1 ///////////////////////////////////////////////////////////////////////////////
2 // Name:        wx/checkeddelete.h
3 // Purpose:     wxCHECKED_DELETE() macro
4 // Author:      Vadim Zeitlin
5 // Created:     2009-02-03
6 // Copyright:   (c) 2002-2009 wxWidgets dev team
7 // Licence:     wxWindows licence
8 ///////////////////////////////////////////////////////////////////////////////
9 
10 #ifndef _WX_CHECKEDDELETE_H_
11 #define _WX_CHECKEDDELETE_H_
12 
13 #include "wx/cpp.h"
14 
15 // TODO: provide wxCheckedDelete[Array]() template functions too
16 
17 // ----------------------------------------------------------------------------
18 // wxCHECKED_DELETE and wxCHECKED_DELETE_ARRAY macros
19 // ----------------------------------------------------------------------------
20 
21 /*
22    checked deleters are used to make sure that the type being deleted is really
23    a complete type.: otherwise sizeof() would result in a compile-time error
24 
25    do { ... } while ( 0 ) construct is used to have an anonymous scope
26    (otherwise we could have name clashes between different "complete"s) but
27    still force a semicolon after the macro
28 */
29 
30 #define wxCHECKED_DELETE(ptr)                                                 \
31     wxSTATEMENT_MACRO_BEGIN                                                   \
32         typedef char complete[sizeof(*ptr)] WX_ATTRIBUTE_UNUSED;              \
33         delete ptr;                                                           \
34     wxSTATEMENT_MACRO_END
35 
36 #define wxCHECKED_DELETE_ARRAY(ptr)                                           \
37     wxSTATEMENT_MACRO_BEGIN                                                   \
38         typedef char complete[sizeof(*ptr)] WX_ATTRIBUTE_UNUSED;              \
39         delete [] ptr;                                                        \
40     wxSTATEMENT_MACRO_END
41 
42 
43 #endif // _WX_CHECKEDDELETE_H_
44 
45