00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_LEAKGUARD_H__
00020 #define __CS_LEAKGUARD_H__
00021
00022 #ifdef CS_USE_LEAK_GUARD
00023 #define CS_LEAKGUARD_DECLARE(m) \
00024 struct csLeakGuard \
00025 { \
00026 int counter; \
00027 csLeakGuard () : counter (0) { } \
00028 ~csLeakGuard () \
00029 { \
00030 if (counter != 0) \
00031 { \
00032 printf ("%d leaking instance(s) of %s detected!\n", counter, #m); \
00033 fflush (stdout); \
00034 } \
00035 } \
00036 }; \
00037 static csLeakGuard leakguard; \
00038 struct csLeakGuardInstance \
00039 { \
00040 csLeakGuardInstance () \
00041 { \
00042 leakguard.counter++; \
00043 } \
00044 ~csLeakGuardInstance () \
00045 { \
00046 leakguard.counter--; \
00047 } \
00048 }; \
00049 csLeakGuardInstance leakguardinstance
00050
00051 #define CS_LEAKGUARD_IMPLEMENT(m) \
00052 m::csLeakGuard m::leakguard
00053
00054 #else
00055 #define CS_LEAKGUARD_DECLARE(m) \
00056 struct csLeakGuard
00057 #define CS_LEAKGUARD_IMPLEMENT(m) \
00058 struct csLeakGuard
00059 #endif
00060
00061 #endif // __CS_LEAKGUARD_H__