00001
00002
00003
00004
00005
00006 #ifndef BALL_CONCEPT_AUTODELETABLE_H
00007 #define BALL_CONCEPT_AUTODELETABLE_H
00008
00009 #ifndef BALL_CONFIG_CONFIG_H
00010 # include <BALL/CONFIG/config.h>
00011 #endif
00012
00013 #ifndef BALL_COMMON_COMMON_H
00014 # include <BALL/COMMON/debug.h>
00015 #endif
00016
00017 #ifndef BALL_COMMON_GLOBAL_H
00018 # include <BALL/COMMON/global.h>
00019 #endif
00020
00021 #include <stdlib.h>
00022 #include <new>
00023 #include <iostream>
00024
00025 namespace BALL
00026 {
00027
00058 class BALL_EXPORT AutoDeletable
00059 {
00060 public:
00061
00066
00069 virtual ~AutoDeletable()
00070 ;
00071
00079 void* operator new(size_t size)
00080 ;
00081
00088 void operator delete(void* ptr)
00089 ;
00090
00098 void* operator new(size_t size, void* ptr)
00099 ;
00100
00107 void operator delete(void* ptr, void*)
00108 ;
00109
00111
00115
00122 void setAutoDeletable(bool enable)
00123 ;
00124
00125
00126
00127
00128
00129 static void clearLastPtr() { last_ptr_ = 0; }
00131
00135
00142 bool isAutoDeletable() const
00143 ;
00145
00146
00147 protected:
00148
00149
00150
00151
00152
00153 AutoDeletable()
00154 ;
00155
00156
00157
00158 AutoDeletable(const AutoDeletable& auto_deletable, bool deep = false)
00159 ;
00160
00161
00162 private:
00163
00164
00165
00166 bool enabled_;
00167
00168
00169
00170
00171
00172 static void* last_ptr_;
00173 };
00174
00175 # ifndef BALL_NO_INLINE_FUNCTIONS
00176 # include <BALL/CONCEPT/autoDeletable.iC>
00177 # endif
00178
00179 }
00180
00181 #endif // BALL_CONCEPT_AUTODELETABLE_H