* Shared (garbage collecting) pointers. Copied from Boost.
This commit is contained in:
		
							parent
							
								
									0b70231b9d
								
							
						
					
					
						commit
						6ba26f27c3
					
				
					 12 changed files with 1268 additions and 17 deletions
				
			
		
							
								
								
									
										71
									
								
								src/boost/checked_delete.hpp
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										71
									
								
								src/boost/checked_delete.hpp
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,71 @@ | |||
| #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED | ||||
| #define BOOST_CHECKED_DELETE_HPP_INCLUDED | ||||
| 
 | ||||
| // MS compatible compilers support #pragma once
 | ||||
| 
 | ||||
| #if defined(_MSC_VER) && (_MSC_VER >= 1020) | ||||
| # pragma once | ||||
| #endif | ||||
| 
 | ||||
| //
 | ||||
| //  boost/checked_delete.hpp
 | ||||
| //
 | ||||
| //  Copyright (c) 1999, 2000, 2001, 2002 boost.org
 | ||||
| //  Copyright (c) 2002, 2003 Peter Dimov
 | ||||
| //  Copyright (c) 2003 Daniel Frey
 | ||||
| //  Copyright (c) 2003 Howard Hinnant
 | ||||
| //
 | ||||
| //  Permission to copy, use, modify, sell and distribute this software
 | ||||
| //  is granted provided this copyright notice appears in all copies.
 | ||||
| //  This software is provided "as is" without express or implied
 | ||||
| //  warranty, and with no claim as to its suitability for any purpose.
 | ||||
| //
 | ||||
| //  See http://www.boost.org/libs/utility/checked_delete.html for documentation.
 | ||||
| //
 | ||||
| 
 | ||||
| namespace boost | ||||
| { | ||||
| 
 | ||||
| // verify that types are complete for increased safety
 | ||||
| 
 | ||||
| template<class T> inline void checked_delete(T * x) | ||||
| { | ||||
|     // intentionally complex - simplification causes regressions
 | ||||
|     typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; | ||||
|     (void) sizeof(type_must_be_complete); | ||||
|     delete x; | ||||
| } | ||||
| 
 | ||||
| template<class T> inline void checked_array_delete(T * x) | ||||
| { | ||||
|     typedef char type_must_be_complete[ sizeof(T)? 1: -1 ]; | ||||
|     (void) sizeof(type_must_be_complete); | ||||
|     delete [] x; | ||||
| } | ||||
| 
 | ||||
| template<class T> struct checked_deleter | ||||
| { | ||||
|     typedef void result_type; | ||||
|     typedef T * argument_type; | ||||
| 
 | ||||
|     void operator()(T * x) const | ||||
|     { | ||||
|         // boost:: disables ADL
 | ||||
|         boost::checked_delete(x); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| template<class T> struct checked_array_deleter | ||||
| { | ||||
|     typedef void result_type; | ||||
|     typedef T * argument_type; | ||||
| 
 | ||||
|     void operator()(T * x) const | ||||
|     { | ||||
|         boost::checked_array_delete(x); | ||||
|     } | ||||
| }; | ||||
| 
 | ||||
| } // namespace boost
 | ||||
| 
 | ||||
| #endif  // #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED
 | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue