git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58634 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
///////////////////////////////////////////////////////////////////////////////
 | 
						|
// Name:        wx/checkeddelete.h
 | 
						|
// Purpose:     wxCHECKED_DELETE() macro
 | 
						|
// Author:      Vadim Zeitlin
 | 
						|
// Created:     2009-02-03
 | 
						|
// RCS-ID:      $Id$
 | 
						|
// Copyright:   (c) 2002-2009 wxWidgets dev team
 | 
						|
// Licence:     wxWindows licence
 | 
						|
///////////////////////////////////////////////////////////////////////////////
 | 
						|
 | 
						|
#ifndef _WX_CHECKEDDELETE_H_
 | 
						|
#define _WX_CHECKEDDELETE_H_
 | 
						|
 | 
						|
// TODO: provide wxCheckedDelete[Array]() template functions too
 | 
						|
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
// wxCHECKED_DELETE and wxCHECKED_DELETE_ARRAY macros
 | 
						|
// ----------------------------------------------------------------------------
 | 
						|
 | 
						|
/*
 | 
						|
   checked deleters are used to make sure that the type being deleted is really
 | 
						|
   a complete type.: otherwise sizeof() would result in a compile-time error
 | 
						|
 | 
						|
   do { ... } while ( 0 ) construct is used to have an anonymous scope
 | 
						|
   (otherwise we could have name clashes between different "complete"s) but
 | 
						|
   still force a semicolon after the macro
 | 
						|
*/
 | 
						|
 | 
						|
#ifdef __WATCOMC__
 | 
						|
    #define wxFOR_ONCE(name)              for(int name=0; name<1; name++)
 | 
						|
    #define wxPRE_NO_WARNING_SCOPE(name)  wxFOR_ONCE(wxMAKE_UNIQUE_NAME(name))
 | 
						|
    #define wxPOST_NO_WARNING_SCOPE(name)
 | 
						|
#else
 | 
						|
    #define wxPRE_NO_WARNING_SCOPE(name)  do
 | 
						|
    #define wxPOST_NO_WARNING_SCOPE(name) while ( wxFalse )
 | 
						|
#endif
 | 
						|
 | 
						|
#define wxCHECKED_DELETE(ptr)                                                 \
 | 
						|
    wxPRE_NO_WARNING_SCOPE(scope_var1)                                        \
 | 
						|
    {                                                                         \
 | 
						|
        typedef char complete[sizeof(*ptr)];                                  \
 | 
						|
        delete ptr;                                                           \
 | 
						|
    } wxPOST_NO_WARNING_SCOPE(scope_var1)
 | 
						|
 | 
						|
#define wxCHECKED_DELETE_ARRAY(ptr)                                           \
 | 
						|
    wxPRE_NO_WARNING_SCOPE(scope_var2)                                        \
 | 
						|
    {                                                                         \
 | 
						|
        typedef char complete[sizeof(*ptr)];                                  \
 | 
						|
        delete [] ptr;                                                        \
 | 
						|
    } wxPOST_NO_WARNING_SCOPE(scope_var2)
 | 
						|
 | 
						|
 | 
						|
#endif // _WX_CHECKEDDELETE_H_
 | 
						|
 |