00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #if !defined(_XRB_DELETE_HPP_)
00012 #define _XRB_DELETE_HPP_
00013
00014
00015
00016 #include "xrb_assert.hpp"
00017
00018 #if !defined(NULL)
00019 #define NULL static_cast<void *>(0)
00020 #endif // !defined(NULL)
00021
00022 namespace Xrb
00023 {
00024
00033 template <typename T>
00034 inline void Delete (T *&pointer)
00035 {
00036 ASSERT1(
00037 pointer != reinterpret_cast<T *>(0xFBADFACE) &&
00038 "This pointer has already been deleted");
00039 delete pointer;
00040 #if XRB_DEBUG_LEVEL > 0
00041 pointer = reinterpret_cast<T *>(0xFBADFACE);
00042 #endif // XRB_DEBUG_LEVEL > 0
00043 }
00044
00053 template <typename T>
00054 inline void Delete (T const *&pointer)
00055 {
00056 ASSERT1(
00057 pointer != reinterpret_cast<T const *>(0xFBADFACE) &&
00058 "This pointer has already been deleted");
00059 delete pointer;
00060 #if XRB_DEBUG_LEVEL > 0
00061 pointer = reinterpret_cast<T const *>(0xFBADFACE);
00062 #endif // XRB_DEBUG_LEVEL > 0
00063 }
00064
00073 template <typename T>
00074 inline void DeleteArray (T *&pointer)
00075 {
00076 ASSERT1(
00077 pointer != reinterpret_cast<T *>(0xFBADFACE) &&
00078 "This pointer has already been deleted");
00079 delete[] pointer;
00080 #if XRB_DEBUG_LEVEL > 0
00081 pointer = reinterpret_cast<T *>(0xFBADFACE);
00082 #endif // XRB_DEBUG_LEVEL > 0
00083 }
00084
00093 template <typename T>
00094 inline void DeleteArray (T const *&pointer)
00095 {
00096 ASSERT1(
00097 pointer != reinterpret_cast<T const *>(0xFBADFACE) &&
00098 "This pointer has already been deleted");
00099 delete[] pointer;
00100 #if XRB_DEBUG_LEVEL > 0
00101 pointer = reinterpret_cast<T const *>(0xFBADFACE);
00102 #endif // XRB_DEBUG_LEVEL > 0
00103 }
00104
00111 template <typename T>
00112 inline void DeleteAndNullify (T *&pointer)
00113 {
00114 delete pointer;
00115 pointer = NULL;
00116 }
00117
00124 template <typename T>
00125 inline void DeleteAndNullify (T const *&pointer)
00126 {
00127 delete pointer;
00128 pointer = NULL;
00129 }
00130
00137 template <typename T>
00138 inline void DeleteArrayAndNullify (T *&pointer)
00139 {
00140 delete[] pointer;
00141 pointer = NULL;
00142 }
00143
00150 template <typename T>
00151 inline void DeleteArrayAndNullify (T const *&pointer)
00152 {
00153 delete[] pointer;
00154 pointer = NULL;
00155 }
00156
00157 }
00158
00159 #endif // !defined(_XRB_DELETE_HPP_)
00160