29 #ifndef JUCE_LEAKEDOBJECTDETECTOR_H_INCLUDED
30 #define JUCE_LEAKEDOBJECTDETECTOR_H_INCLUDED
46 template <
class OwnerClass>
56 if (--(getCounter().numObjects) < 0)
58 DBG (
"*** Dangling pointer deletion! Class: " << getLeakedObjectClassName());
84 if (numObjects.value > 0)
86 DBG (
"*** Leaked objects detected: " << numObjects.value <<
" instance(s) of class " << getLeakedObjectClassName());
102 static const char* getLeakedObjectClassName()
104 return OwnerClass::getLeakedObjectClassName();
107 static LeakCounter& getCounter()
noexcept
109 static LeakCounter counter;
115 #if DOXYGEN || ! defined (JUCE_LEAK_DETECTOR)
116 #if (DOXYGEN || JUCE_CHECK_MEMORY_LEAKS)
136 #define JUCE_LEAK_DETECTOR(OwnerClass) \
137 friend class juce::LeakedObjectDetector<OwnerClass>; \
138 static const char* getLeakedObjectClassName() noexcept { return #OwnerClass; } \
139 juce::LeakedObjectDetector<OwnerClass> JUCE_JOIN_MACRO (leakDetector, __LINE__);
141 #define JUCE_LEAK_DETECTOR(OwnerClass)
146 #endif // JUCE_LEAKEDOBJECTDETECTOR_H_INCLUDED
#define noexcept
Definition: juce_CompilerSupport.h:141
Definition: juce_Atomic.h:41
LeakedObjectDetector(const LeakedObjectDetector &) noexcept
Definition: juce_LeakedObjectDetector.h:52
~LeakedObjectDetector()
Definition: juce_LeakedObjectDetector.h:54
Definition: juce_LeakedObjectDetector.h:47
LeakedObjectDetector() noexcept
Definition: juce_LeakedObjectDetector.h:51