diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-06-18 09:20:51 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2004-06-18 09:20:51 +0000 |
commit | 6ba26f27c3665ec5f72638a8c658b0aa68068410 (patch) | |
tree | 1086faffe6471d446ae1ea2f3b0e67ec83278317 /src/boost/checked_delete.hpp | |
parent | 0b70231b9d9f2dfa5a9447fcd01fdb5c8f1fa0ea (diff) |
* Shared (garbage collecting) pointers. Copied from Boost.
Diffstat (limited to 'src/boost/checked_delete.hpp')
-rw-r--r-- | src/boost/checked_delete.hpp | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/src/boost/checked_delete.hpp b/src/boost/checked_delete.hpp new file mode 100644 index 000000000..d7f52122d --- /dev/null +++ b/src/boost/checked_delete.hpp @@ -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 |